From 9e721264e912cb815c379f0d6bbfafcdfe6c5cc9 Mon Sep 17 00:00:00 2001 From: Dotta <34892728+cryppadotta@users.noreply.github.com> Date: Mon, 12 Oct 2026 17:20:00 -0500 Subject: [PATCH] feat: maintain Storybook through a downstream feature catalog (#16046) ## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - Storybook supports review of its production UI and proposed designs. > - Its 223 story files have no consistent link to product capabilities or record of component and mock provenance. > - Old compositions can drift while they still look like current product examples. > - This pull request adds two maintenance skills and a catalog that consumes the existing feature map. > - The first audit preserves all stories and fixes proven fixture drift. > - Contributors can now find examples by feature and see what still needs review. ## Linked Issues or Issue Description **What existing behavior does this improve?** Storybook maintenance, feature discovery, and the accuracy of isolated UI examples. **Current behavior** Stories are already centralized under `ui/storybook/`, but their sidebar has 51 top-level groups. Production components, local prototypes, and historical designs are not consistently distinguished. The old guide uses manual coverage claims. GitHub searches found no duplicate feature-map catalog change. **Proposed behavior** Keep existing story locations and IDs. Add a downstream catalog keyed to stable feature capabilities. Record product status, rendered subject, data boundary, and declared review dependencies separately. Use dedicated maintenance and review skills to reconcile drift and report evidence. **Reason and benefit** The catalog makes existing examples reusable without treating mock behavior or old designs as production acceptance. The feature map remains independent of Storybook. ## What Changed - Add `maintain-storybook` and `review-storybook` skills with contributor guidance. - Inventory all 223 story files. Generate a feature index and provide searchable navigation in the existing Overview story. Track direct subjects through relative imports and local wrappers, including the primitives demonstrated by foundation suites. - Add a checker for inventory, capability references, duplicate IDs, and declared-source drift, with eight regression tests. The parser test covers real nested CSF files, export filters, explicit IDs, and play counts. - Preserve historical designs and classify mixed wrappers. Record the initial audit and remaining parity work. - Align the question-dismiss/send fixture with production behavior. Add dismissal and confirmation-reopen regressions and repair the editor selector. - Exclude three exported fast-response fixtures from story discovery and add the missing render-time callback spy. ## Verification - Passed: `node scripts/storybook-catalog.mjs`, `node --test scripts/storybook-catalog.test.mjs` (8 tests), and `node scripts/check-maps.mjs`. - Passed: validators for both new skills, `pnpm check:token-gates`, `pnpm -r typecheck`, and `pnpm build`. - Passed: final Storybook build; nine selected browser `play` cases; three fast-response render cases; feature-guide search/link navigation; question-fixture reset on reload. - Built-index comparison preserved all 2,208 original story IDs and added only two new regression cases. - Passed: `pnpm exec vitest run --project @paperclipai/ui` (728 files, 8,176 tests). - The full `pnpm test:run` has reported a 15-second timeout in the untouched backend case `connects advertised Workspace gmail.read without mutating definitions in authenticated`. The exact test passed standalone without changing code, expectations, or timeouts. The remaining broad run was stopped after this failure. The full suite is not verified. - Visual comparison is blocked by the existing empty baseline manifest. The managed-accounts API/DB fixture was not started. See `maps/storybook-map/REVIEW.md` for exact scope. ## Risks - This is an initial inventory and targeted audit. 188 suites still require deeper state and fixture parity review. - Review hashes cover declared dependencies. They do not follow all transitive production imports or prove semantic correctness. - The catalog requires upkeep when stories, mapped recipes, or declared subjects change. Shared mocks still need feature-by-feature contract review. - No production application source, database schema, or upstream feature-map contract changes. ## Model Used OpenAI GPT-6 via Codex. Used reasoning, shell tools, file editing, and Chromium browser verification. The exact runtime model ID and context window are not exposed in this session. ## 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 - [ ] 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 | 72 + .../maintain-storybook/agents/openai.yaml | 3 + .agents/skills/review-storybook/SKILL.md | 47 + .../review-storybook/agents/openai.yaml | 3 + AGENTS.md | 6 + doc/DEVELOPING.md | 9 + maps/storybook-map/INDEX.md | 609 ++ maps/storybook-map/README.md | 73 + maps/storybook-map/REVIEW.md | 125 + maps/storybook-map/catalog.json | 5142 +++++++++++++++++ scripts/storybook-catalog.mjs | 134 + scripts/storybook-catalog.test.mjs | 114 + ui/storybook/prototypes/README.md | 2 +- ui/storybook/stories/agent-chat.stories.tsx | 2 +- ui/storybook/stories/chat-entry.stories.tsx | 2 +- .../fast-responses/01-settings.stories.tsx | 2 + ui/storybook/stories/overview.stories.tsx | 257 +- ...hat-interaction-above-composer.stories.tsx | 33 +- 19 files changed, 6445 insertions(+), 192 deletions(-) create mode 100644 .agents/skills/maintain-storybook/SKILL.md create mode 100644 .agents/skills/maintain-storybook/agents/openai.yaml create mode 100644 .agents/skills/review-storybook/SKILL.md create mode 100644 .agents/skills/review-storybook/agents/openai.yaml create mode 100644 maps/storybook-map/INDEX.md create mode 100644 maps/storybook-map/README.md create mode 100644 maps/storybook-map/REVIEW.md create mode 100644 maps/storybook-map/catalog.json create mode 100644 scripts/storybook-catalog.mjs create mode 100644 scripts/storybook-catalog.test.mjs diff --git a/.agents/skills/create-issue-interaction-ui/SKILL.md b/.agents/skills/create-issue-interaction-ui/SKILL.md index 9cebfacc95b..db19f147680 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/src/stories/issue-thread-interactions.stories.tsx` — Storybook entries +- `ui/storybook/stories/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 new file mode 100644 index 00000000000..ce4837167e8 --- /dev/null +++ b/.agents/skills/maintain-storybook/SKILL.md @@ -0,0 +1,72 @@ +--- +name: maintain-storybook +description: Keep Paperclip stories and their downstream catalog aligned with the feature map and production UI. Use to reconcile story drift, classify prototypes, update fixtures, or maintain feature coverage. +--- + +# Maintain Storybook + +Read the [Storybook catalog contract](../../../maps/storybook-map/README.md), +the relevant [feature recipes](../../../maps/feature-map/README.md), and +[DESIGN.md](../../../DESIGN.md). The feature map is an upstream input. This skill +owns stories, their fixtures/support, and `maps/storybook-map/`; it does not edit +the feature or agent-access maps. Report upstream drift to +`maintain-verification-skill` with source evidence. + +## Reconcile the requested scope + +For a feature/change, follow its capability IDs to catalog entries and shared +dependencies. For a full inventory, account for every configured story file, +including historical examples. Start with `node scripts/storybook-catalog.mjs`. +Record the source revision and whether the pass covers source, rendering, +interactions, or visual comparisons. Inventory completeness is not behavioral +coverage. Do not expand a targeted maintenance request into an all-product audit. + +Compare each affected story's rendered subject, props, fixture responses, actions, +and assertions with the production implementation and recipe. Follow imported +wrappers: a production Button inside a locally recreated page does not make that +page a production-component story. A real production page using mocked APIs is +valid isolation; record component provenance and data simulation separately. +Inspect mock methods/paths, payload shapes, errors, identity, gates, and reset +behavior. An API method returning success without the relevant state transition +can hide drift. Do not replace errors with generic successful mocks to pass. + +Prefer mounting the shipped subject and mocking its external boundary. Retain +local layout wrappers and fixture data when they serve that isolation. Replace a +duplicate product implementation only when the current component expresses the +same scenario without losing the original purpose. Production bugs and larger +redesigns are separate findings, not reasons to rewrite expected behavior. + +Classify current examples, proposals, historical explorations, and unresolved +cases explicitly. Use `unreviewed` when evidence does not establish parity. +Retain useful superseded work with its rationale and replacement reference; +do not delete a story merely because it is old, mocked, or duplicated by name. +Record mixed suites honestly and split them only when that improves review. + +## Preserve identity and keep the index useful + +Assign existing stable `area/capability` references, with one primary reference +and optional related references. Foundations and unmapped proposals need explicit +reasons rather than invented capabilities. Cross-cutting stories have one source +and several references. Do not count historical/proposed stories as current +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. +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 +are the demonstrated subject. Do not cap the number of source references. +Update review fingerprints only after inspecting the changed source; do not refresh hashes merely +to silence drift checks. + +Update the catalog and run `node scripts/storybook-catalog.mjs --write` to refresh +its generated index, then run the checker without flags. The script validates +inventory/references/review fingerprints, not semantic parity or runtime health. +Use `review-storybook` for affected rendering and interactions. Reuse the existing +Storybook/Playwright tools; add no separate launcher, runtime, or baseline system. +Do not accept new screenshot baselines as part of a catalog cleanup. + +Report what was corrected, retained, and still needs review, naming exact files +and capabilities. Keep source-only results separate from executed results and +name blocked checks. A full pass must not hide unreviewed stories or claim that +fixture interactions establish production API, permission, or provider behavior. diff --git a/.agents/skills/maintain-storybook/agents/openai.yaml b/.agents/skills/maintain-storybook/agents/openai.yaml new file mode 100644 index 00000000000..79bc58f9192 --- /dev/null +++ b/.agents/skills/maintain-storybook/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Maintain Storybook" + short_description: "Align stories with features and production UI" diff --git a/.agents/skills/review-storybook/SKILL.md b/.agents/skills/review-storybook/SKILL.md new file mode 100644 index 00000000000..cdc1bc07bc6 --- /dev/null +++ b/.agents/skills/review-storybook/SKILL.md @@ -0,0 +1,47 @@ +--- +name: review-storybook +description: Review Paperclip stories for a feature or change using the Storybook catalog, production source, and existing browser tests. Report component, mock, interaction, and visual evidence separately. +--- + +# Review Storybook + +Read the [catalog contract](../../../maps/storybook-map/README.md) and find the +requested capability in its generated index. Check the relevant feature recipe, +production subject, and story before driving it. Catalog status is prior review +context, not proof of the current revision. This skill consumes the maps/catalog; +corrections belong to `maintain-storybook` or `maintain-verification-skill`. + +Choose discriminating states for the requested change: the normal action and +result, relevant failure/retry, gate/permission presentation, and mobile/theme +variants where affected. Record chosen files/exports and omitted scope. For a +full source review, account for every file; do not describe sampling as full +render or interaction coverage. + +Use [the existing Storybook commands](../../../doc/DEVELOPING.md#storybook): +`pnpm build-storybook`, or an owned Storybook dev server on an available local +port. Use the built `ui/storybook-static/index.json` for actual story IDs and +links. Do not trust an unrelated server on the default port. Keep the process +handle and stop only the server this review started, retaining useful evidence. + +Inspect the real rendered subject, including errors and browser console output. +For interactive stories, wait for their `play` assertions to complete and inspect +the observable result. A screenshot alone does not prove `play` passed. Verify +fixture isolation by revisiting/resetting relevant stories when they mutate +fetch handlers, storage, query caches, time, or module state. Avoid real provider +actions; explicitly document any live dependency required by a story. + +The existing visual suite is +`tests/storybook-visual/storybook-visual.spec.ts`. It uses external baselines and +a pinned Linux environment. Inspect `baseline-manifest.json` before claiming +visual regression proof. An unpublished manifest blocks comparisons; a macOS +capture is useful inspection, not the Linux baseline. Do not update/publish +baselines just to make a review pass. Use existing focused browser suites where +they cover the requested scenario, and the production verification skill when +the question requires backend persistence, real authorization, or provider proof. + +Report each selected case as passed, failed, blocked, or not run, naming revision, +story ID, environment, production versus prototype subject, simulated boundaries, +action/assertion and observed result. Separate render, interaction, visual +comparison, and production acceptance evidence. Report proven drift with exact +source references and a proposed correction; do not lower expectations, remove +failing cases, or silently bless historical behavior as current. diff --git a/.agents/skills/review-storybook/agents/openai.yaml b/.agents/skills/review-storybook/agents/openai.yaml new file mode 100644 index 00000000000..16a92f0250b --- /dev/null +++ b/.agents/skills/review-storybook/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Review Storybook" + short_description: "Review story rendering, interactions, and drift" diff --git a/AGENTS.md b/AGENTS.md index 55ee4734b84..c7b53d20d43 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -162,6 +162,12 @@ Follow [the map contract](maps/README.md): update affected entries when mapped behavior or access changes, and run `node scripts/check-maps.mjs` after map edits. Its structural checks do not prove live behavior or authorization. +Storybook has a downstream [feature catalog](maps/storybook-map/README.md). +Use `maintain-storybook` for story/fixture drift and `review-storybook` for browser +evidence. Keep the feature-map skills independent of this catalog. After story +or declared review-source changes, reconcile affected entries and run +`node scripts/storybook-catalog.mjs`; its checks are not production acceptance. + Default local/agent test path: ```sh diff --git a/doc/DEVELOPING.md b/doc/DEVELOPING.md index 065eea917bf..e803ac65a22 100644 --- a/doc/DEVELOPING.md +++ b/doc/DEVELOPING.md @@ -124,6 +124,15 @@ 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. +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 +source-review status. Use `maintain-storybook` to reconcile stories/fixtures with +the feature map, and `review-storybook` to exercise them with existing tools. +Run `node scripts/storybook-catalog.mjs` after affected story or review-source +changes; review drift before updating fingerprints, then regenerate with `--write`. +The feature map remains an upstream input and needs no Storybook-specific fields. + **Chat & Comments → Human identity** covers other-human names and avatars on left-aligned task messages alongside agents; only the viewer’s own messages are blue/right-aligned. Its review guide explains the data flow; the task journey uses representative fixtures in the production shell and thread with an agent and two humans, both diff --git a/maps/storybook-map/INDEX.md b/maps/storybook-map/INDEX.md new file mode 100644 index 00000000000..e4ad7063ab5 --- /dev/null +++ b/maps/storybook-map/INDEX.md @@ -0,0 +1,609 @@ +# Storybook by feature + + + +[Contract and maintenance](README.md) · [Review findings](REVIEW.md) + +223 story files; 2210 indexed stories. Counts describe inventory, not passed tests or complete feature coverage. + +Status describes product alignment; implementation describes the rendered subject; boundary describes simulated data. Sources and limitations are in catalog.json. Related capabilities cross-list one canonical story file. + +## access + +[Feature recipe](../feature-map/access.md) + +| 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. | + +## activity + +[Feature recipe](../feature-map/activity.md) + +| 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. | + +## agent-chat + +[Feature recipe](../feature-map/agent-chat.md) + +| 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. | + +## agents + +[Feature recipe](../feature-map/agents.md) + +| 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. | + +## app-permissions + +[Feature recipe](../feature-map/app-permissions.md) + +| 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. | + +## budgets-costs + +[Feature recipe](../feature-map/budgets-costs.md) + +| 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. | + +## chat-channels + +[Feature recipe](../feature-map/chat-channels.md) + +| 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. | + +## companies + +[Feature recipe](../feature-map/companies.md) + +| 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. | + +## connection-setup + +[Feature recipe](../feature-map/connection-setup.md) + +| 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. | + +## developer-labs + +[Feature recipe](../feature-map/developer-labs.md) + +| 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. | + +## documents-artifacts + +[Feature recipe](../feature-map/documents-artifacts.md) + +| 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. | + +## 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. | + +## gateways-profiles + +[Feature recipe](../feature-map/gateways-profiles.md) + +| 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. | + +## inbox-search + +[Feature recipe](../feature-map/inbox-search.md) + +| 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. | + +## instance-operations + +[Feature recipe](../feature-map/instance-operations.md) + +| 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. | + +## navigation-preferences + +[Feature recipe](../feature-map/navigation-preferences.md) + +| 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. | + +## onboarding + +[Feature recipe](../feature-map/onboarding.md) + +| 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. | + +## projects + +[Feature recipe](../feature-map/projects.md) + +| 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. | + +## questions-and-approvals + +[Feature recipe](../feature-map/questions-and-approvals.md) + +| 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. | + +## recovery + +[Feature recipe](../feature-map/recovery.md) + +| 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. | + +## routines + +[Feature recipe](../feature-map/routines.md) + +| 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. | + +## runs-adapters + +[Feature recipe](../feature-map/runs-adapters.md) + +| 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. | + +## secrets + +[Feature recipe](../feature-map/secrets.md) + +| 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. | + +## skills + +[Feature recipe](../feature-map/skills.md) + +| 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. | + +## steering + +[Feature recipe](../feature-map/steering.md) + +| 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. | + +## task-coordination + +[Feature recipe](../feature-map/task-coordination.md) + +| 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 + +[Feature recipe](../feature-map/tasks.md) + +| 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. | + +## teams + +[Feature recipe](../feature-map/teams.md) + +| 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. | + +## workspaces + +[Feature recipe](../feature-map/workspaces.md) + +| 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. | + +## 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/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/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/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) +- `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) +- `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) +- `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/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) +- `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/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/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) +- `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/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) +- `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/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) +- `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) +- `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/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/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/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/resume`: No cataloged story. +- `pipelines/stages`: No cataloged story. +- `pipelines/items`: No cataloged story. +- `pipelines/review`: No cataloged story. +- `pipelines/learnings`: No cataloged story. +- `plugins/installation`: No cataloged story. +- `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) +- `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/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/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) +- `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) +- `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) +- `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/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) +- `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/closure`: No cataloged story. diff --git a/maps/storybook-map/README.md b/maps/storybook-map/README.md new file mode 100644 index 00000000000..528e9f57211 --- /dev/null +++ b/maps/storybook-map/README.md @@ -0,0 +1,73 @@ +# Storybook map + +The [feature index](INDEX.md) connects the existing Storybook to stable capability +IDs from the upstream [feature map](../feature-map/README.md). Story files remain +in `ui/storybook/`. The feature map and its maintenance skill do not depend on +this catalog. New capabilities or upstream recipe drift are reported to their +maintainer; this catalog does not redefine product behavior or permissions. + +## Ownership + +- [maintain-storybook](../../.agents/skills/maintain-storybook/SKILL.md) owns story + alignment, fixture corrections, classification, and this catalog. +- [review-storybook](../../.agents/skills/review-storybook/SKILL.md) consumes it to + select and exercise examples, then reports evidence and drift. +- [DESIGN.md](../../DESIGN.md) governs design. Production verification remains + with the existing product recipes and verification tools. + +## Catalog contract + +`catalog.json` is the maintained inventory, with one entry per story file. +`INDEX.md` is generated from it and the installed Storybook CSF parser. Titles, +export filtering, story counts and IDs come from source, not filename guesses. +All examples are retained, including historical suites. A file's first capability +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. + +Each entry records purpose, capability references, review sources/date/fingerprint, +notes, and three independent dimensions: + +| Dimension | Values | +| --- | --- | +| Product status | `current`: source comparison supports the named subject; `proposed`: intentional alternate design; `historical`: superseded reference retained for its original purpose; `mixed`: suite combines these; `unreviewed`: parity has not been established | +| Implementation | `production`: shipped subject with fixture/layout wrappers; `prototype`: locally implemented subject, even if it uses shared primitives; `mixed`: both subjects; `guide`: explanatory documentation | +| Data boundary | `fixtures`: props, callbacks, caches or API responses are simulated; `fixture-server`: requires a separately owned local API/database fixture with simulated upstream providers; `static`: explanatory/static examples | + +`current` is a source-review classification, not a promise that every state renders +or that APIs, gates, persistence and providers passed live tests. `unreviewed` +entries still have an inventory/classification review; notes explain the deeper +parity work outstanding. Mixed files retain a note naming the important split. +Production components can legitimately use mock data. A prototype directory name +does not establish implementation: some wrappers there re-export shipped UI. + +Review sources include the story, relevant local support and production subjects. +Include directly rendered subjects regardless of import spelling, and primitives +when the suite demonstrates them. Do not truncate the list to a fixed source count. +Fingerprints make changes to those declared dependencies visible. They do not +follow every transitive production import or infer semantic correctness. Shared +preview/config/fixture changes have a separate fingerprint and require reviewing +affected callers. Update fingerprints only after reviewing the change, and add +missing dependencies when discovered. Date/revision context for the initial pass +and executed evidence belong in [REVIEW.md](REVIEW.md). + +## Maintenance commands + +After installing workspace dependencies: + +```sh +node scripts/storybook-catalog.mjs +node scripts/storybook-catalog.mjs --write +node --test scripts/storybook-catalog.test.mjs +``` + +The checker rejects unaccounted or deleted stories, invalid capability references, +duplicate entries/IDs, missing review sources, changed fingerprints and a stale +generated index. `--write` only regenerates the index; it never refreshes review +fingerprints or blesses drift. Preserve IDs when changing titles or moving files; +compare the existing built Storybook index before and after such changes. + +Use the existing [Storybook workflow](../../doc/DEVELOPING.md#storybook) for builds, +browser review, and visual tests. Report source inspection, rendering, `play` +assertions, visual comparisons and production acceptance separately. Do not publish +new visual baselines just to make catalog maintenance pass. diff --git a/maps/storybook-map/REVIEW.md b/maps/storybook-map/REVIEW.md new file mode 100644 index 00000000000..a98ce00134e --- /dev/null +++ b/maps/storybook-map/REVIEW.md @@ -0,0 +1,125 @@ +# Initial Storybook review — 2026-10-12 + +Source baseline: `f0e12c851971a21f7aadf0835b016bfaf2067314`. +Scope: complete source inventory and initial classification, with targeted source +comparison and browser checks. This is not full state parity, full interaction +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. + +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. + +| Dimension | Initial classification | +| --- | --- | +| Product alignment | 18 current subjects, 4 proposals, 5 historical suites, 8 mixed suites, 188 requiring deeper parity review | +| Rendered subject | 199 production, 8 prototype, 11 mixed, 5 guides | +| Data boundary | 217 fixture-based, 1 separate fixture server, 5 static guides | + +A production subject can have unreviewed state parity. A current subject can still +have untested loading, error, permission, or backend behavior. The catalog's notes +and source references qualify these labels; none are a substitute for live proof. + +## Corrections and retained history + +- **Question dismissal and send:** the local interaction-above-composer harness + kept a pending badge for dismissed questions and left the question open after + a normal send. Production `TaskChatThread` excludes questions from + `pendingReminderInputs` and dismisses the selected question on send. The harness + now matches those rules. Added question-dismiss and confirmation-reopen cases; + corrected the send case's stale editor selector. The story still does not prove + persisted dismissal or history behavior. +- **Fast response helpers:** `empty`, `configured`, and `result` were exported + fixtures which Storybook also treated as stories. Their IDs collided with + `Empty`, `Configured`, and `Result`. Explicit exclusion removes the false exports + while retaining the real stories and imported fixtures. Browser review also + exposed a missing explicit `onConnectionChange` spy after the production view + began calling it on mount; added that fixture callback. +- **Chat provenance:** the main chat wrapper combines production conversation/task + pages with a local landing view. The separate first-created-agent chat-entry + design is historical; current primary-agent examples are its replacement. +- **Historical designs retained:** GitHub chat, old agent onboarding, connect-model + tiles, paused composer, and chat-entry remain available with their purpose and + replacement references. Local proposals are labeled rather than deleted. +- **Prototype folder is not a verdict:** some files re-export production subjects; + others implement local compositions. Static import traversal found no obvious + orphan prototype TS/TSX module. This is not proof that each is still useful. +- **Contributor guidance:** replaced the old Overview's manual coverage claims, + corrected the interaction-authoring skill's obsolete story path, and updated the + prototype README's catalog source count to match the shipped five sources. + +## Verification + +Environment: local macOS, headless Chromium, built Storybook 10.6.0, fixture data. +The following nine `play` cases reached Storybook's `storyFinished: success` event +without a browser page exception. These results establish story interactions only. + +| Story ID | Subject / assertion | +| --- | --- | +| `composer-interaction-above-composer--ask-user-questions-and-send` | Production card/composer in local harness; normal send dismisses question without a pending badge | +| `composer-interaction-above-composer--dismiss-question-without-pending-badge` | Production card/composer; dismiss leaves editable composer without pending badge | +| `composer-interaction-above-composer--dismiss-confirmation-keeps-pending-badge` | Production card/composer; dismiss retains confirmation badge and reopening works | +| `composer-new-task--empty` | Production composer wrapper; existing play assertions | +| `design-explorations-agent-chat-sidebar-components--add-and-reopen-chat` | Production sidebar; fixture add/reopen assertions | +| `assistant-connections-consent--choose-organization` | Production consent surface; fixture organization selection assertions | +| `historical-github-chat-prototypes--standard-trust-warning` | Historical prototype; existing trust-warning assertions, not current GitHub acceptance | +| `design-previews-recovery-notice--retry-request-failed` | Production recovery notice; fixture failure-state assertions | +| `composer-mobile-assignee-picker--picker-open` | Production picker; existing open-picker assertions | + +Additional manual browser checks passed: search the guide for `steering/queue`, +follow its link to the real queued-message story, dismiss a question, then reload +and verify that the fixture resets to an open question. Screenshots were inspected +locally and are not committed as new regression baselines. + +Built-index comparison: all 2,208 prior story IDs remain; only the two new dismissal +regressions were added (2,210 total). Catalog validation, eight checker tests, +feature-map validation, both skill validators, token gates, workspace typecheck, +and workspace build passed. Fast-response settings `empty`, `configured`, and +`result` subsequently reached `storyFinished: success` with no page exceptions +following the explicit callback fix. These three cases are render checks, not save +or backend-persistence tests. The UI Vitest project passed all 8,176 tests in 728 +files. The full `pnpm test:run` reported a 15-second timeout in the unchanged backend +case `connects advertised Workspace gmail.read without mutating definitions in +authenticated`. That exact case passed standalone without changing expectations +or timeouts. The remaining broad run was stopped after this failure; a complete +repository suite pass is not established. + +Automated review found missing directly rendered subjects in the initial dependency +list. Expanded the catalog across affected suites, including relative production +imports, all direct non-primitive subjects in local wrappers, and the primitives +that foundation stories demonstrate. Explanatory review guides keep their separate +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. + +## Remaining review work + +1. Review the 188 unreviewed suites by capability and production subject. Compare + state transitions, payloads, errors, gates, and reset behavior before promoting + a suite. Start with large route wrappers and shared fixture dependencies. +2. Shared preview mocks can fall through to the original fetch; some route harnesses + return empty arrays for unmatched APIs. These can hide missing fixtures. Audit + affected endpoints per feature rather than treating a render as API coverage. +3. The managed-accounts test-drive story needs the separately owned local API/DB + fixture at port 4310. Its upstream providers are simulated. It was not exercised + against an unknown existing service. +4. Screenshot comparison is blocked: the existing baseline manifest has zero + snapshots and no published archive. Keep using the established Linux baseline + workflow when its baseline is published. Do not bless new baselines as part of + catalog cleanup. +5. Review fingerprints track declared sources, including feature recipes and local + support; they do not traverse every production dependency. Add missing subjects + when a review discovers them. Shared setup changes require reviewing callers. + +Use `maintain-storybook` to correct drift and `review-storybook` to record separate +source, render, interaction, visual-comparison, and production evidence. Both skills +consume the feature map; neither changes its upstream contract. diff --git a/maps/storybook-map/catalog.json b/maps/storybook-map/catalog.json new file mode 100644 index 00000000000..f5f709d681f --- /dev/null +++ b/maps/storybook-map/catalog.json @@ -0,0 +1,5142 @@ +{ + "version": 1, + "sharedReview": { + "sources": [ + "ui/storybook/.storybook/main.ts", + "ui/storybook/.storybook/preview.tsx", + "ui/storybook/fixtures/paperclipData.ts" + ], + "fingerprint": "0faabc5a8874f37674125d28314833c6a1e99c804d929a6d1e7f7917109eca0a" + }, + "entries": [ + { + "file": "ui/storybook/stories/AppLogoRegistry.stories.tsx", + "capabilities": [ + "connection-setup/catalog" + ], + "purpose": "Apps/Canonical icon registry", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/pages/apps/AppLogo.tsx", + "ui/storybook/stories/AppLogoRegistry.stories.tsx" + ], + "fingerprint": "e3fa28652112529c2761778f90a577aaf9f09a13ddda6d53e55679294b48b6f7" + }, + { + "file": "ui/storybook/stories/ArcadeConnection.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "connection-setup/failure" + ], + "purpose": "Apps/Connections/Arcade", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/components/JsonSchemaForm.tsx", + "ui/src/features/connections/remote-mcp/RemoteMcpConnectionSetup.tsx", + "ui/src/features/connections/remote-mcp/providers.ts", + "ui/src/features/connections/remote-mcp/types.ts", + "ui/storybook/fixtures/remoteMcpConnections.ts", + "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", + "ui/storybook/stories/ArcadeConnection.stories.tsx" + ], + "fingerprint": "af73c5883c7a3e925f793162841c310ab72e5f32f6a4a469242391480ac2c6f8" + }, + { + "file": "ui/storybook/stories/ComposioConnection.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "connection-setup/failure" + ], + "purpose": "Apps/Connections/Composio", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/components/JsonSchemaForm.tsx", + "ui/src/features/connections/remote-mcp/RemoteMcpConnectionSetup.tsx", + "ui/src/features/connections/remote-mcp/providers.ts", + "ui/src/features/connections/remote-mcp/types.ts", + "ui/storybook/fixtures/remoteMcpConnections.ts", + "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", + "ui/storybook/stories/ComposioConnection.stories.tsx" + ], + "fingerprint": "9299acfe719df8946ca3ebc03be6dfa5d851c2b1e6df0ad805a23f082fdde8e2" + }, + { + "file": "ui/storybook/stories/ConnectionProviderChoice.stories.tsx", + "capabilities": [ + "connection-setup/identity-and-access" + ], + "purpose": "Apps/Connections/Provider choice", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/components/JsonSchemaForm.tsx", + "ui/src/components/task-chat/QuestionForm.tsx", + "ui/src/features/connections/remote-mcp/RemoteMcpAccountChoice.tsx", + "ui/src/features/connections/remote-mcp/RemoteMcpConnectionSetup.tsx", + "ui/src/features/connections/remote-mcp/providers.ts", + "ui/src/features/connections/remote-mcp/types.ts", + "ui/storybook/fixtures/remoteMcpConnections.ts", + "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", + "ui/storybook/stories/ConnectionProviderChoice.stories.tsx" + ], + "fingerprint": "565a8e231c737785da884ecacb7f6496e47e0adcf8c0b8b53a2e783d85431190" + }, + { + "file": "ui/storybook/stories/ExecutorConnection.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "connection-setup/failure" + ], + "purpose": "Apps/Connections/Executor", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/components/JsonSchemaForm.tsx", + "ui/src/features/connections/remote-mcp/RemoteMcpConnectionSetup.tsx", + "ui/src/features/connections/remote-mcp/providers.ts", + "ui/src/features/connections/remote-mcp/types.ts", + "ui/storybook/fixtures/remoteMcpConnections.ts", + "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", + "ui/storybook/stories/ExecutorConnection.stories.tsx" + ], + "fingerprint": "28ab0d5d137cf7b0f034b38b09ab70ce149fe87a80f38925b39b4ff33ea6a1ff" + }, + { + "file": "ui/storybook/stories/ZapierConnection.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "connection-setup/failure" + ], + "purpose": "Apps/Connections/Zapier", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/components/JsonSchemaForm.tsx", + "ui/src/features/connections/remote-mcp/RemoteMcpConnectionSetup.tsx", + "ui/src/features/connections/remote-mcp/providers.ts", + "ui/src/features/connections/remote-mcp/types.ts", + "ui/storybook/fixtures/remoteMcpConnections.ts", + "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", + "ui/storybook/stories/ZapierConnection.stories.tsx" + ], + "fingerprint": "07c8ba08275396b83609fe6abe9c96a8ee3e770a79ee87d3c50dc5e154739030" + }, + { + "file": "ui/storybook/stories/access-profiles.stories.tsx", + "capabilities": [ + "gateways-profiles/profiles" + ], + "purpose": "Tools/Access profiles", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/gateways-profiles.md", + "ui/src/pages/AgentToolsTab.tsx", + "ui/src/pages/tools/profiles/ProfileDetail.tsx", + "ui/src/pages/tools/profiles/ProfileWizard.tsx", + "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" + ], + "fingerprint": "357db52703a6de66aa349e1be6e3b63c05d63c73ebea09b8222cc029fac61bd6" + }, + { + "file": "ui/storybook/stories/action-card.stories.tsx", + "capabilities": [ + "app-permissions/test-action", + "app-permissions/action-policy" + ], + "purpose": "Tools & Access/ActionCard", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/app-permissions.md", + "ui/src/components/actions/ActionCard.tsx", + "ui/storybook/stories/action-card.stories.tsx" + ], + "fingerprint": "a6435989227e6cf87f99ba2b04e2fa530916d215af99376807954b9368d841e7" + }, + { + "file": "ui/storybook/stories/action-permissions-test.stories.tsx", + "capabilities": [ + "app-permissions/test-action", + "app-permissions/action-policy" + ], + "purpose": "Apps/Action permissions test", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/app-permissions.md", + "ui/src/pages/apps/app-detail/PermissionsPanel.tsx", + "ui/storybook/stories/action-permissions-test.stories.tsx" + ], + "fingerprint": "d439cc4ed01cde90656217bd21eb5252543333096f1585ed176d698073540db6" + }, + { + "file": "ui/storybook/stories/activity-feed.stories.tsx", + "capabilities": [ + "activity/activity", + "gateways-profiles/activity" + ], + "purpose": "Tools/Activity (audit feed)", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/activity.md", + "maps/feature-map/gateways-profiles.md", + "ui/src/pages/tools/AuditTab.tsx", + "ui/storybook/stories/activity-feed.stories.tsx" + ], + "fingerprint": "44c9670f0f93caef2fa27a2dff3068b8e8f8d5acfb04ca75605e4157e626afa2" + }, + { + "file": "ui/storybook/stories/agent-chat-sidebar.stories.tsx", + "capabilities": [ + "agent-chat/discovery", + "agent-chat/history" + ], + "purpose": "Design explorations/Agent chat sidebar/Pages", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Wrapper mounts production Layout and AgentChat; conversation selection and sends use in-memory routes. Directory name is not prototype evidence.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "ui/src/components/AgentChatPicker.tsx", + "ui/src/components/AgentIconPicker.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgentChats.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "ui/src/pages/Agents.tsx", + "ui/src/pages/IssueDetail.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/agent-chat-sidebar/AgentChatSidebarReview.tsx", + "ui/storybook/prototypes/agent-chat-sidebar/fixtures.ts", + "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" + ], + "fingerprint": "06118dfa08dfe635b484e629cd7c0f60b2659362a364586dd0769274dcf7d835" + }, + { + "file": "ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx", + "capabilities": [ + "questions-and-approvals/dismiss-and-reopen", + "agent-chat/history" + ], + "purpose": "Chat & Comments/Agent Chat Unanswered Questions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "maps/feature-map/questions-and-approvals.md", + "ui/src/components/TaskChatThread.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/fixtures/unansweredQuestionChat.tsx", + "ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx" + ], + "fingerprint": "f7d8eae40ddb9ce46bac841a84f56f334be3d84b4cd3a29e9e2d0be29bba210c" + }, + { + "file": "ui/storybook/stories/agent-chat.stories.tsx", + "capabilities": [ + "agent-chat/discovery", + "agent-chat/history" + ], + "purpose": "Design explorations/Agent chat", + "status": "mixed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Production conversation/task routes with a local ChatEntryLanding. Default-agent behavior and fallback API responses remain outside current-product parity.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "ui/src/components/AgentChatPicker.tsx", + "ui/src/components/AgentIconPicker.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgentChats.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "ui/src/pages/Agents.tsx", + "ui/src/pages/IssueDetail.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/agent-chat-sidebar/AgentChatSidebarReview.tsx", + "ui/storybook/prototypes/agent-chat-sidebar/fixtures.ts", + "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" + ], + "fingerprint": "fb9e699105a458fb3d5737cb56fdbe9fe2d2d057263866a151eca5b3027706f8" + }, + { + "file": "ui/storybook/stories/agent-connection-reuse.stories.tsx", + "capabilities": [ + "runs-adapters/validation", + "agents/hire" + ], + "purpose": "Onboarding/Saved connections", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "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" + ], + "fingerprint": "47e8cbed9e9c4c8ee2c8f81a9c21c60ba9eec566927c5338e288358d3309daca" + }, + { + "file": "ui/storybook/stories/agent-conversation-sidebar.stories.tsx", + "capabilities": [ + "agent-chat/discovery", + "agent-chat/history" + ], + "purpose": "Design explorations/Agent chat sidebar/Components", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Support module re-exports production AgentConversationSidebar; search/selection use fixture callbacks.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "ui/src/components/AgentConversationSidebar.tsx", + "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" + ], + "fingerprint": "2487bb6ec01cd75131317b2739088256dabd217227b2af11d62590c31a9b3e14" + }, + { + "file": "ui/storybook/stories/agent-detail.stories.tsx", + "capabilities": [ + "agents/lifecycle", + "agents/instructions" + ], + "purpose": "Pages/Agent Detail", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "ui/src/pages/AgentDetail.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/agent-detail.stories.tsx" + ], + "fingerprint": "2764437abfbc3c215e400ad167c45927f4a77d5aa978a2f0d267918008ffbea2" + }, + { + "file": "ui/storybook/stories/agent-files.stories.tsx", + "capabilities": [ + "agents/instructions" + ], + "purpose": "Agents/Persistent files", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "ui/src/pages/AgentDetail.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/agent-files.stories.tsx" + ], + "fingerprint": "98f8c49c2ae6b814d58948151b9d448b2ee527c8aba505682e7c4c218f66f7b3" + }, + { + "file": "ui/storybook/stories/agent-management.stories.tsx", + "capabilities": [ + "agents/lifecycle", + "agents/instructions" + ], + "purpose": "Product/Agent Management", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "ui/src/components/ActiveAgentsPanel.tsx", + "ui/src/components/AgentActionButtons.tsx", + "ui/src/components/AgentConfigForm.tsx", + "ui/src/components/AgentIconPicker.tsx", + "ui/src/components/AgentProperties.tsx", + "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" + ], + "fingerprint": "16725cb4e0337cd38458dbc497c614de2252b564afc80648c7311c36bfa2ad11" + }, + { + "file": "ui/storybook/stories/agent-persona-pages.stories.tsx", + "capabilities": [ + "agents/organization", + "navigation-preferences/profile" + ], + "purpose": "Agents/Personas/Full pages", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "maps/feature-map/navigation-preferences.md", + "ui/src/components/Layout.tsx", + "ui/src/components/new-agent/AgentBasicsDialog.tsx", + "ui/src/pages/AgentDetail.tsx", + "ui/src/pages/Agents.tsx", + "ui/src/pages/Dashboard.tsx", + "ui/src/pages/IssueDetail.tsx", + "ui/src/pages/NewAgent.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/agent-persona-pages.stories.tsx" + ], + "fingerprint": "e32cbe590cef4e26e04dad1207814c21321c97b9e227b80867dd8643351e6671" + }, + { + "file": "ui/storybook/stories/agent-personas.stories.tsx", + "capabilities": [ + "agents/organization", + "navigation-preferences/profile" + ], + "purpose": "Agents/Personas", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "maps/feature-map/navigation-preferences.md", + "ui/src/components/AgentAvatar.tsx", + "ui/src/components/AgentCharacter.tsx", + "ui/src/components/AgentIdentity.tsx", + "ui/src/components/ui/button.tsx", + "ui/storybook/stories/agent-personas.stories.tsx" + ], + "fingerprint": "03774c3aa9c051aedd0b06603e2f11b79ef2ab46f4fe36f3de3cca8b20779630" + }, + { + "file": "ui/storybook/stories/agent-settings-redesign.stories.tsx", + "capabilities": [ + "agents/lifecycle", + "agents/instructions" + ], + "purpose": "Agents/Configuration refresh", + "status": "mixed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Production configuration panels in a locally composed settings shell; full AgentDetail route parity remains unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "ui/src/components/AgentActionButtons.tsx", + "ui/src/components/AgentConfigForm.tsx", + "ui/src/components/AgentContextualSidebar.tsx", + "ui/src/components/NewIssueDialog.tsx", + "ui/src/components/RuntimeTestCard.tsx", + "ui/src/components/onboarding/PillGuy.tsx", + "ui/src/pages/AgentDetail.tsx", + "ui/src/pages/AgentToolsTab.tsx", + "ui/src/pages/agent-detail-navigation.ts", + "ui/src/pages/agent-skills/AgentSkillsTab.tsx", + "ui/storybook/fixtures/onboardingEnvironment.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/RuntimeTestCard.tsx", + "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" + ], + "fingerprint": "68fb03c2e0b52e178b3e4a31330a23de8a6568e683d7b6c1e0288fa9e8817cef" + }, + { + "file": "ui/storybook/stories/agent-setup-prompt.stories.tsx", + "capabilities": [ + "connection-setup/channel-setup", + "gateways-profiles/client-connect" + ], + "purpose": "Components/Agent setup prompt", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "maps/feature-map/gateways-profiles.md", + "ui/src/components/AgentSetupPrompt.tsx", + "ui/src/components/IssueContinuationHandoff.tsx", + "ui/src/components/routine-triggers/TriggerWizard.tsx", + "ui/src/components/routine-triggers/WebhookFields.tsx", + "ui/src/pages/apps/chat/GitHubSetupPrompt.tsx", + "ui/src/pages/apps/chat/SlackSetupPrompt.tsx", + "ui/src/pages/tools/McpConfigHelpDialog.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/fixtures/routineTriggerWizard.tsx", + "ui/storybook/stories/agent-setup-prompt.stories.tsx" + ], + "fingerprint": "fc121ecd05c89050c58aa621dc8fded8b5cf0573a1190bacca73e31c560421f9" + }, + { + "file": "ui/storybook/stories/agent-skill-row.stories.tsx", + "capabilities": [ + "skills/policy" + ], + "purpose": "Agent Skills/AgentSkillRow", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "b7d7b0f600d8cfbc93b410283bd9ed5340c18a71e3943036d796755d6c8fd996" + }, + { + "file": "ui/storybook/stories/agent-skills-edge.stories.tsx", + "capabilities": [ + "skills/policy" + ], + "purpose": "QA / Agent skills edge states", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/pages/agent-skills/AgentSkillsTab.tsx", + "ui/storybook/stories/agent-skills-edge.stories.tsx" + ], + "fingerprint": "5132a7175c3065dba3d329ab7e7307f54e84834c378c3ffaa81265501d8e69e9" + }, + { + "file": "ui/storybook/stories/agentmail-onboarding.stories.tsx", + "capabilities": [ + "chat-channels/providers", + "connection-setup/channel-setup" + ], + "purpose": "Connections/AgentMail setup", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "maps/feature-map/connection-setup.md", + "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" + ], + "fingerprint": "464f6dee03ed94915bf3156bb2aa97401e180bf5db43c82bceaa6bb9a7887c66" + }, + { + "file": "ui/storybook/stories/agentmail-settings.stories.tsx", + "capabilities": [ + "chat-channels/lifecycle" + ], + "purpose": "Connections/AgentMail settings", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "ui/src/pages/apps/chat/EmailEndpointSetup.tsx", + "ui/storybook/stories/agentmail-settings.stories.tsx" + ], + "fingerprint": "ba24f131f18b10d82bf6f9fac575deace7f768826c87be7802c3d13754b32a33" + }, + { + "file": "ui/storybook/stories/agentmail.stories.tsx", + "capabilities": [ + "chat-channels/conversation" + ], + "purpose": "Connections/AgentMail tasks", + "status": "unreviewed", + "implementation": "prototype", + "boundary": "fixtures", + "notes": "Local EmailTaskExperience combines production composer/bubbles with simulated email lifecycle; compare against IssueDetail before claiming page parity.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "ui/src/components/AgentIconPicker.tsx", + "ui/src/components/StatusBadge.tsx", + "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" + ], + "fingerprint": "2fdb42f80a884f88df3cc3d6c2ad943a0d3795e6211419dbc3de65e87171605e" + }, + { + "file": "ui/storybook/stories/agents-using-skill.stories.tsx", + "capabilities": [ + "skills/policy" + ], + "purpose": "Skill Studio/AgentsUsingSkill", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/components/skill-studio/AgentsUsingSkillDialog.tsx", + "ui/storybook/stories/agents-using-skill.stories.tsx" + ], + "fingerprint": "5e5234b76008eb043c0f5eface1a5d517acd5c9bcd8eb2bafdba52dbf9d326a0" + }, + { + "file": "ui/storybook/stories/ai-connection-usage.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Usage limits", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "4efd03cf0c2db2db7e6e0ab7355a228601f310796c503ae5bb4af1114a428173" + }, + { + "file": "ui/storybook/stories/ai-connections.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Review", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/BreadcrumbBar.tsx", + "ui/src/components/ai-connections/AiConnectionAccountControls.tsx", + "ui/src/components/ai-connections/AiConnectionAuth.tsx", + "ui/src/components/ai-connections/AiConnectionManagement.tsx", + "ui/src/components/ai-connections/AiConnectionPicker.tsx", + "ui/src/components/ai-connections/model.ts", + "ui/src/components/onboarding/CredentialModeLink.tsx", + "ui/src/components/onboarding/ModelSourceTiles.tsx", + "ui/src/features/connections/ConnectionIntentInteractionBody.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/src/pages/apps/AppDetail.tsx", + "ui/src/pages/apps/Browse.tsx", + "ui/storybook/fixtures/aiConnections.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/AiConnectionsReview.tsx", + "ui/storybook/prototypes/AiConnectorPages.tsx", + "ui/storybook/prototypes/AiReviewFrame.tsx", + "ui/storybook/prototypes/AiTaskConnectionReview.tsx", + "ui/storybook/stories/ai-connections.stories.tsx" + ], + "fingerprint": "fc716216e27fe7f4e51ce86bd85932032868845e326b7921d7d8de7e6d3694f2" + }, + { + "file": "ui/storybook/stories/announcement-card.stories.tsx", + "capabilities": [ + "navigation-preferences/announcements" + ], + "purpose": "Announcements/AnnouncementCard", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/navigation-preferences.md", + "ui/src/components/AnnouncementCard.tsx", + "ui/storybook/stories/announcement-card.stories.tsx" + ], + "fingerprint": "bd2aa00c1b5368b969623de78f908d6c150d5c7eafa7849443619577ffda5584" + }, + { + "file": "ui/storybook/stories/app-activity-lifecycle.stories.tsx", + "capabilities": [ + "activity/activity", + "gateways-profiles/activity" + ], + "purpose": "Apps/App detail \u00b7 Activity (lifecycle)", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/activity.md", + "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" + ], + "fingerprint": "2052136a7fe3aa332b62ca8f834466c6f4aadfac1132e4b0a339b5d90e4ae121" + }, + { + "file": "ui/storybook/stories/apps-catalog-source-selection.stories.tsx", + "capabilities": [ + "connection-setup/catalog" + ], + "purpose": "Apps/Catalog source selection", + "status": "proposed", + "implementation": "prototype", + "boundary": "fixtures", + "notes": "Local catalog composition uses shipped cards and filters; retains design exploration purpose, not acceptance of the Apps route.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "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" + ], + "fingerprint": "71108df1e0c55a7d007d5ea9524c82fbe02c1fe09681d0f42b1cc09b682459c5" + }, + { + "file": "ui/storybook/stories/apps-connect-discoverability.stories.tsx", + "capabilities": [ + "connection-setup/catalog" + ], + "purpose": "Apps/Connect discoverability (PAP-11091)", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "339076110e02558725fdf381a8afd22c028d6b1a2a338a4936c1fd952c4b031b" + }, + { + "file": "ui/storybook/stories/apps-connect-name.stories.tsx", + "capabilities": [ + "connection-setup/identity-and-access" + ], + "purpose": "Apps/Connect name at create time (PAP-11283)", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/pages/apps/AppsConnect.tsx", + "ui/storybook/stories/apps-connect-name.stories.tsx" + ], + "fingerprint": "b1a3c62891259a601e557401ae736ff07f36086d6590dd2c162dcdfbf64169ee" + }, + { + "file": "ui/storybook/stories/apps-managed-accounts.stories.tsx", + "capabilities": [ + "app-permissions/account-maintenance" + ], + "purpose": "Apps/Managed accounts", + "status": "current", + "implementation": "production", + "boundary": "fixture-server", + "notes": "Production Browse requires owned tests/aggregator-accounts/test-drive.ts on localhost:4310; providers are simulated. Not an offline story.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "db39db8db1587a056f564aba8644046039cf05851922e4252eba654ccef67247" + }, + { + "file": "ui/storybook/stories/artifact-cards/commit.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Explorations/Artifact cards/Commit", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "cc04cd9c903fe2481162604f9b01581f2aecbb34ffeca71b4d8f30e6a5fc4878" + }, + { + "file": "ui/storybook/stories/artifact-cards/data.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Explorations/Artifact cards/Data", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "5d6b98f8eb2d9ff0c9731d1b693abab7af1249684e628db7e12bee50b140079e" + }, + { + "file": "ui/storybook/stories/artifact-cards/document.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Explorations/Artifact cards/Document", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "2da653267415c871f17d8c98e9ef2fa242ba16887f4a8d1ce36f518639b86a36" + }, + { + "file": "ui/storybook/stories/artifact-cards/file.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Explorations/Artifact cards/File", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "ef9ef8d955bda7798faf079478bd199cfda610b4aba21b868a337708165181ea" + }, + { + "file": "ui/storybook/stories/artifact-cards/image.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Explorations/Artifact cards/Image", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "de8efb7cdd55182eea4864acb3cc0d780316cce1f38a098c39a18146185fd8dd" + }, + { + "file": "ui/storybook/stories/artifact-cards/link-preview.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Explorations/Artifact cards/Link preview", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "204dd94ac390bee7999c35f16f9018f4c9375c58c4275efa54516a4f94a997f3" + }, + { + "file": "ui/storybook/stories/artifact-cards/pull-request.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Explorations/Artifact cards/Pull request", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "ee061a6b23593b55d3e1faa53f29b949d4376c169154dec0d00927a191d9df0d" + }, + { + "file": "ui/storybook/stories/artifact-cards/video.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Explorations/Artifact cards/Video", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "4a8f4ffd72e951ef7cb7f48d93a46b333b780d135cccbacea35112c3efd784ea" + }, + { + "file": "ui/storybook/stories/artifact-upload/01-components.stories.tsx", + "capabilities": [ + "documents-artifacts/attachments" + ], + "purpose": "Artifact upload/01 Artifacts pane", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "ui/src/components/artifacts/ArtifactUploadArea.tsx", + "ui/src/components/issue-properties/IssuePropertiesArtifactsTab.tsx", + "ui/src/components/side-panel/SidePanelFrame.tsx", + "ui/src/components/side-panel/SidePanelMobileTabs.tsx", + "ui/src/components/side-panel/SidePanelTabs.tsx", + "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" + ], + "fingerprint": "a4a362aff84256bf6c9d668d1af32beacc213df283be72f0c15274e862d711d2" + }, + { + "file": "ui/storybook/stories/artifact-upload/02-task-journey.stories.tsx", + "capabilities": [ + "documents-artifacts/attachments" + ], + "purpose": "Artifact upload/02 Paused task journey", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "ui/src/components/Layout.tsx", + "ui/src/components/StatusBadge.tsx", + "ui/src/components/artifacts/ArtifactUploadArea.tsx", + "ui/src/components/issue-properties/IssuePropertiesArtifactsTab.tsx", + "ui/src/components/side-panel/SidePanelFrame.tsx", + "ui/src/components/side-panel/SidePanelMobileTabs.tsx", + "ui/src/components/side-panel/SidePanelTabs.tsx", + "ui/src/components/side-panel/types.ts", + "ui/src/components/task-chat/TaskChatBubble.tsx", + "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" + ], + "fingerprint": "3234dc9f9f9f8554c70c5e47ce99e7625d9be6c18fde2f68e9919b67c94d189e" + }, + { + "file": "ui/storybook/stories/artifacts.stories.tsx", + "capabilities": [ + "documents-artifacts/library", + "documents-artifacts/work-products" + ], + "purpose": "Pages/Artifacts", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "ui/src/components/EmptyState.tsx", + "ui/src/components/artifacts/ArtifactCard.tsx", + "ui/src/pages/Artifacts.tsx", + "ui/storybook/stories/artifacts.stories.tsx" + ], + "fingerprint": "6849a85f6f4a0ace498ef44555703631ccef19d8d6c5bf0be77a0939a6355570" + }, + { + "file": "ui/storybook/stories/assigned-backlog-safeguards.stories.tsx", + "capabilities": [ + "tasks/completion", + "recovery/diagnosis" + ], + "purpose": "Paperclip/Assigned Backlog Safeguards", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "maps/feature-map/tasks.md", + "ui/src/components/IssueAssignedBacklogNotice.tsx", + "ui/src/components/IssueBlockedNotice.tsx", + "ui/src/components/IssueRow.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/assigned-backlog-safeguards.stories.tsx" + ], + "fingerprint": "1bfdf9275f15aaf609ba074aee9ff5697640ce7aedf1f7442c29ba2efaab3815" + }, + { + "file": "ui/storybook/stories/blocked-inbox.stories.tsx", + "capabilities": [ + "inbox-search/triage", + "recovery/diagnosis" + ], + "purpose": "Product/Inbox/Blocked tab", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/inbox-search.md", + "maps/feature-map/recovery.md", + "ui/src/components/BlockedInboxView.tsx", + "ui/src/components/BlockedReasonChip.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/blocked-inbox.stories.tsx" + ], + "fingerprint": "b3307d74bb191f0e68d92957c72583d5fbf086c8a4fd5c5a8373d9b62bf94373" + }, + { + "file": "ui/storybook/stories/browser-use-activity.stories.tsx", + "capabilities": [ + "workspaces/services", + "tasks/discussion" + ], + "purpose": "Tasks/Browser Use/Task activity", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "maps/feature-map/workspaces.md", + "ui/src/components/task-chat/TaskChatThreadView.tsx", + "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" + ], + "fingerprint": "f48f9bca0111f2c8724b8e6988519a2773d50bad540384e9700c2d2223989702" + }, + { + "file": "ui/storybook/stories/browser-use-footer.stories.tsx", + "capabilities": [ + "workspaces/services", + "tasks/discussion" + ], + "purpose": "Tasks/Browser Use/Footer", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "maps/feature-map/workspaces.md", + "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" + ], + "fingerprint": "1b526f900301f1f88da2f6407aee5aca7810febbe08ee21d2ea894caa0c1fc16" + }, + { + "file": "ui/storybook/stories/browser-use-settings.stories.tsx", + "capabilities": [ + "connection-setup/credentials" + ], + "purpose": "Connections/Browser Use Cloud/Settings", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "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" + ], + "fingerprint": "d3c1ef6ae15960f95b3f01a29015ec13f12c808b3518a09fe51f2343a6c45cf6" + }, + { + "file": "ui/storybook/stories/browser-use.stories.tsx", + "capabilities": [ + "workspaces/services", + "tasks/discussion" + ], + "purpose": "Tasks/Browser Use/Panel", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "maps/feature-map/workspaces.md", + "ui/src/components/task-side-panel/TaskBrowserPanel.tsx", + "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" + ], + "fingerprint": "c20411591b3079cb7327011443916a51814cbe08a352e43b55a5e760fb60bbcb" + }, + { + "file": "ui/storybook/stories/budget-finance.stories.tsx", + "capabilities": [ + "budgets-costs/cost-reporting", + "budgets-costs/budgets" + ], + "purpose": "Product/Budget & Finance", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/budgets-costs.md", + "ui/src/components/AccountingModelCard.tsx", + "ui/src/components/BillerSpendCard.tsx", + "ui/src/components/BudgetIncidentCard.tsx", + "ui/src/components/BudgetSidebarMarker.tsx", + "ui/src/components/ClaudeSubscriptionPanel.tsx", + "ui/src/components/CodexSubscriptionPanel.tsx", + "ui/src/components/FinanceBillerCard.tsx", + "ui/src/components/FinanceKindCard.tsx", + "ui/src/components/FinanceTimelineCard.tsx", + "ui/src/components/ProviderQuotaCard.tsx", + "ui/storybook/stories/budget-finance.stories.tsx" + ], + "fingerprint": "87b870bba22a1ce4ec0fec08bdaf04e45c5cffe47c74a3b0de4950fee8f716f3" + }, + { + "file": "ui/storybook/stories/built-in-agents.stories.tsx", + "capabilities": [ + "agents/built-in" + ], + "purpose": "Product/Built-in Agents", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "ui/src/components/BuiltInAgentBadges.tsx", + "ui/src/components/BuiltInBundlePanel.tsx", + "ui/src/components/ConfigureBuiltInAgentModal.tsx", + "ui/src/components/EmptyState.tsx", + "ui/src/components/EntityRow.tsx", + "ui/src/components/InlineBanner.tsx", + "ui/src/components/StatusBadge.tsx", + "ui/storybook/stories/built-in-agents.stories.tsx" + ], + "fingerprint": "340d7f75d5e4fe1cf8a4da2de80993db12476da37f865095d85f8f3ad199d322" + }, + { + "file": "ui/storybook/stories/chat-comments.stories.tsx", + "capabilities": [ + "tasks/discussion", + "runs-adapters/runs" + ], + "purpose": "Product/Chat & Comments", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "maps/feature-map/tasks.md", + "ui/src/components/CommentThread.tsx", + "ui/src/components/InlineEntitySelector.tsx", + "ui/src/components/IssueChatThread.tsx", + "ui/src/components/MarkdownBody.tsx", + "ui/src/components/MarkdownEditor.tsx", + "ui/src/components/RunChatSurface.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/chat-comments.stories.tsx" + ], + "fingerprint": "42d7f459fe99fa1ffe35aca99adc7d50fbf021def17217d4d0d98a3138147545" + }, + { + "file": "ui/storybook/stories/chat-connection-actions.stories.tsx", + "capabilities": [ + "chat-channels/providers" + ], + "purpose": "Connections/Chat connection actions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "ui/src/pages/apps/Browse.tsx", + "ui/storybook/stories/chat-connection-actions.stories.tsx" + ], + "fingerprint": "584867de85a87346a449e621a647ad0560480f49c1ecb5856fc289a37efdd55d" + }, + { + "file": "ui/storybook/stories/chat-entry.stories.tsx", + "capabilities": [ + "agent-chat/discovery", + "agent-chat/history" + ], + "purpose": "Design explorations/Chat entry", + "status": "historical", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Retained first-created-agent sidebar/landing design predates personal primary-agent selection. Shared production conversation components remain useful.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "ui/src/components/AgentChatPicker.tsx", + "ui/src/components/AgentIconPicker.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgentChats.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "ui/src/pages/Agents.tsx", + "ui/src/pages/IssueDetail.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/agent-chat-sidebar/AgentChatSidebarReview.tsx", + "ui/storybook/prototypes/agent-chat-sidebar/fixtures.ts", + "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" + ], + "fingerprint": "bd01b59465cfd0306600927d9d866699aae96586d86b9d4dd62d44fb95b9e559", + "replacement": "ui/storybook/stories/primary-agent/05-chat.stories.tsx" + }, + { + "file": "ui/storybook/stories/chat-management/chat-management.stories.tsx", + "capabilities": [ + "chat-channels/lifecycle" + ], + "purpose": "Connections/Chat management", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "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" + ], + "fingerprint": "35e68e70b16c8fc6eee7d7b80b39ba0a8c06ef855b25617678e37089591e63e5" + }, + { + "file": "ui/storybook/stories/cloud-access-recovery.stories.tsx", + "capabilities": [ + "recovery/reconnect" + ], + "purpose": "App/Connection recovery", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/CloudAccessGate.tsx", + "ui/storybook/stories/cloud-access-recovery.stories.tsx" + ], + "fingerprint": "54a65a26d71cbfe2c513c7b88c93c5c3ce5cd34aa0930a992595a8506e6cc16c" + }, + { + "file": "ui/storybook/stories/completed-activity.stories.tsx", + "capabilities": [ + "tasks/discussion", + "runs-adapters/runs" + ], + "purpose": "Tasks/Completed activity preview", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "maps/feature-map/tasks.md", + "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" + ], + "fingerprint": "b402003511480056c4da8c1d21ce6965ab73affe015320448221d1a8bbe4bcff" + }, + { + "file": "ui/storybook/stories/composer-add-menu.stories.tsx", + "capabilities": [ + "tasks/create" + ], + "purpose": "Composer/Add menu", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "ui/src/components/MobileBottomNav.tsx", + "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" + ], + "fingerprint": "38fa1c5109aa9cb260b1984b63fa68a0e26060c771739013281025e5f5ba1ff4" + }, + { + "file": "ui/storybook/stories/composer-mobile-assignee.stories.tsx", + "capabilities": [ + "tasks/create", + "runs-adapters/availability" + ], + "purpose": "Composer/Mobile assignee picker", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "maps/feature-map/tasks.md", + "ui/src/components/AgentAvatar.tsx", + "ui/src/components/task-chat/ComposerAddMenu.tsx", + "ui/src/components/task-chat/ComposerRunSettingsPicker.tsx", + "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" + ], + "fingerprint": "36c893ca298a464eeefa476ac8fca984eee193610d071123bfbabeca347cd91c" + }, + { + "file": "ui/storybook/stories/composer-model-picker.stories.tsx", + "capabilities": [ + "tasks/create", + "runs-adapters/availability" + ], + "purpose": "Composer/Model and effort picker", + "status": "mixed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Most examples use a local picker implementation; live picker examples use ComposerRunSettingsLiveStory. Do not count the whole suite as production parity.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "maps/feature-map/tasks.md", + "ui/src/components/AgentAvatar.tsx", + "ui/src/components/task-chat/ComposerAddMenu.tsx", + "ui/src/components/task-chat/ComposerRunSettingsPicker.tsx", + "ui/src/components/task-chat/composer-run-settings.ts", + "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" + ], + "fingerprint": "ca7bbe93d9cc0deb70b4ba628c1cce4733ee2740606da3b580edf5f1f637064e" + }, + { + "file": "ui/storybook/stories/composer-question-flow.stories.tsx", + "capabilities": [ + "questions-and-approvals/questions" + ], + "purpose": "Composer/Question flow", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "77aefffb9459df532e75930249ac41364b2767c6a86180cb6f585b2b503397a6" + }, + { + "file": "ui/storybook/stories/composer-queued-messages.stories.tsx", + "capabilities": [ + "steering/queue", + "steering/edit-order-discard", + "steering/steer", + "steering/interrupt" + ], + "purpose": "Composer/Steering and queued messages", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/steering.md", + "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" + ], + "fingerprint": "552065861fb09fde815ba7ee5474d2ac8029a8cd9709e416feab8f68bde9f665" + }, + { + "file": "ui/storybook/stories/connection-instructions.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "agents/instructions" + ], + "purpose": "Design explorations/Connections/Agent instructions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "maps/feature-map/connection-setup.md", + "ui/src/components/Layout.tsx", + "ui/src/features/connections/ConnectionInstructions.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/src/pages/apps/AppDetail.tsx", + "ui/src/pages/apps/Browse.tsx", + "ui/storybook/fixtures/connectionInstructions.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/connection-instructions.stories.tsx" + ], + "fingerprint": "f893e2f93a81a7dfee9bbdb283c7fe6751816895e520620ca44ac308447a6be9" + }, + { + "file": "ui/storybook/stories/connection-pool-connector.stories.tsx", + "capabilities": [ + "runs-adapters/validation", + "connection-setup/catalog" + ], + "purpose": "Connectors/Pool host", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "maps/feature-map/runs-adapters.md", + "ui/src/components/AppConnectionSidebar.tsx", + "ui/src/components/BreadcrumbBar.tsx", + "ui/src/pages/apps/AppDetail.tsx", + "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" + ], + "fingerprint": "bcbb6152b8d200bc36aaffafbd7b0caf3d66d4af568f3891334c1772a9d69762" + }, + { + "file": "ui/storybook/stories/connection-pools.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Connection pools", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/IssueMonitorBanner.tsx", + "ui/src/components/RunRetryDetails.tsx", + "ui/src/components/ai-connections/AiConnectionField.tsx", + "ui/src/components/ai-connections/AiConnectionPoolRunDetails.tsx", + "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" + ], + "fingerprint": "a86d650543360c07057740d5cc7f3e48cbee9e290b86c96adcc18158b749e130" + }, + { + "file": "ui/storybook/stories/connection-reviews.stories.tsx", + "capabilities": [ + "questions-and-approvals/tool-review", + "connection-setup/task-request" + ], + "purpose": "Chat & Comments/Connection Reviews", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "maps/feature-map/questions-and-approvals.md", + "ui/src/components/IssueThreadInteractionCard.tsx", + "ui/src/components/TaskChatThread.tsx", + "ui/src/pages/apps/ReviewQueueCard.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/connection-reviews.stories.tsx" + ], + "fingerprint": "4781c70468820e516ec54b28c4aa86c892ebdd8ea7ff4d8beda7f45ce16cf52b" + }, + { + "file": "ui/storybook/stories/control-plane-surfaces.stories.tsx", + "capabilities": [ + "tasks/organize", + "questions-and-approvals/governance", + "budgets-costs/budgets", + "activity/activity" + ], + "purpose": "Product/Control Plane Surfaces", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/activity.md", + "maps/feature-map/budgets-costs.md", + "maps/feature-map/questions-and-approvals.md", + "maps/feature-map/tasks.md", + "ui/src/components/ActivityRow.tsx", + "ui/src/components/ApprovalCard.tsx", + "ui/src/components/BudgetPolicyCard.tsx", + "ui/src/components/Identity.tsx", + "ui/src/components/IssueRow.tsx", + "ui/src/components/PriorityIcon.tsx", + "ui/src/components/StatusBadge.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/control-plane-surfaces.stories.tsx" + ], + "fingerprint": "48e463f33df3edee88e408325f106f057cf626392a7798db29ff21e67cc1751b" + }, + { + "file": "ui/storybook/stories/costs/subscriptions.stories.tsx", + "capabilities": [ + "budgets-costs/cost-reporting", + "budgets-costs/budgets" + ], + "purpose": "Costs/Subscriptions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/budgets-costs.md", + "ui/src/components/ToastViewport.tsx", + "ui/src/pages/Costs.tsx", + "ui/storybook/stories/costs/subscriptions.stories.tsx" + ], + "fingerprint": "44c98579ca40b85cc50891025e0a162475e6f9e355106a52cff2d928123b0e7f" + }, + { + "file": "ui/storybook/stories/credential-access/01-notice.stories.tsx", + "capabilities": [ + "secrets/runtime-delivery", + "recovery/diagnosis" + ], + "purpose": "Task credential access/01 Notice", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "3f39c81151efe0e2eddf5eb3b6dc8e2ebe8bba356907acf26388e7ac5803c22a" + }, + { + "file": "ui/storybook/stories/credential-access/02-task-page.stories.tsx", + "capabilities": [ + "secrets/runtime-delivery", + "recovery/diagnosis" + ], + "purpose": "Task credential access/02 Task page", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "maps/feature-map/secrets.md", + "ui/src/components/Layout.tsx", + "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" + ], + "fingerprint": "dee6d9ef6fa8157814bddba5cb3b98e3fe5701c4ae0393dfa4662217f1af3ef1" + }, + { + "file": "ui/storybook/stories/csv-preview.stories.tsx", + "capabilities": [ + "documents-artifacts/attachments" + ], + "purpose": "Components/CSV File Tab", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "8dbae007bfb9b3667c2da65148ce2e9512e8db0eb95f928d2f31de629aca2652" + }, + { + "file": "ui/storybook/stories/data-viz-misc.stories.tsx", + "capabilities": [ + "activity/overview" + ], + "purpose": "Product/Data Visualization & Misc", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/activity.md", + "ui/src/components/ActivityCharts.tsx", + "ui/src/components/AsciiArtAnimation.tsx", + "ui/src/components/CompanyPatternIcon.tsx", + "ui/src/components/EntityRow.tsx", + "ui/src/components/FilterBar.tsx", + "ui/src/components/KanbanBoard.tsx", + "ui/src/components/LiveRunWidget.tsx", + "ui/src/components/OnboardingWizard.tsx", + "ui/src/components/PackageFileTree.tsx", + "ui/src/components/PageSkeleton.tsx", + "ui/src/components/StatusBadge.tsx", + "ui/src/components/SwipeToArchive.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/data-viz-misc.stories.tsx" + ], + "fingerprint": "ad2d828d1515d8e6143029578a298b6c7d43b28134b3f0881d0389859b815abc" + }, + { + "file": "ui/storybook/stories/decision-card.stories.tsx", + "capabilities": [ + "inbox-search/decisions" + ], + "purpose": "Decisions/DecisionCard", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/inbox-search.md", + "ui/src/components/DecisionCard.tsx", + "ui/storybook/stories/decision-card.stories.tsx" + ], + "fingerprint": "6e0e5aab6a83de14c0bea6778c15f39420bc52086b4f3660bdcb7d07d446e5ea" + }, + { + "file": "ui/storybook/stories/decision-models/01-settings.stories.tsx", + "capabilities": [ + "companies/identity", + "budgets-costs/cost-reporting" + ], + "purpose": "Decision models/01 Settings", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "f2ba9d71abb3a7c5e3fbc5a9aa4ecc9c516d6de381c3d625f5339bd28c42bfc9" + }, + { + "file": "ui/storybook/stories/decision-models/02-history.stories.tsx", + "capabilities": [ + "companies/identity", + "budgets-costs/cost-reporting" + ], + "purpose": "Decision models/02 History", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "27b401345fcace0bb84970d98fb2f1029de3c75c4c9e509b9772fd2fa60d7ff2" + }, + { + "file": "ui/storybook/stories/decision-models/03-journey.stories.tsx", + "capabilities": [ + "companies/identity", + "budgets-costs/cost-reporting" + ], + "purpose": "Decision models/03 Journey", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/budgets-costs.md", + "maps/feature-map/companies.md", + "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" + ], + "fingerprint": "588cc23bf34b758335fd5ab5ce0f69f478b638b61058a7069bc3de2da327333e" + }, + { + "file": "ui/storybook/stories/decisions-desk.stories.tsx", + "capabilities": [ + "inbox-search/decisions" + ], + "purpose": "Pages/Decisions Desk", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/inbox-search.md", + "ui/src/components/AttentionQueueRow.tsx", + "ui/src/pages/DecisionQueuePage.tsx", + "ui/src/pages/WhatNeedsMe.tsx", + "ui/storybook/stories/decisions-desk.stories.tsx" + ], + "fingerprint": "5aa325138c3bd33be22c11c805d3b0e30bdf40f6e67e5f131d45536fc1af6c52" + }, + { + "file": "ui/storybook/stories/dev-ops-surfaces.stories.tsx", + "capabilities": [ + "instance-operations/server-service" + ], + "purpose": "Product/Dev Ops Surfaces", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/instance-operations.md", + "ui/src/components/DevRestartBanner.tsx", + "ui/storybook/stories/dev-ops-surfaces.stories.tsx" + ], + "fingerprint": "82dde37a5fbbdbaf053c736e3146a7c2bd44da21f0d3a1f48db56149fbeb729a" + }, + { + "file": "ui/storybook/stories/dialogs-modals.stories.tsx", + "capabilities": [ + "tasks/create", + "agents/hire", + "projects/lifecycle", + "goals/hierarchy" + ], + "purpose": "Product/Dialogs & Modals", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "maps/feature-map/goals.md", + "maps/feature-map/projects.md", + "maps/feature-map/tasks.md", + "ui/src/components/DocumentDiffModal.tsx", + "ui/src/components/ExecutionWorkspaceCloseDialog.tsx", + "ui/src/components/ImageGalleryModal.tsx", + "ui/src/components/NewAgentDialog.tsx", + "ui/src/components/NewGoalDialog.tsx", + "ui/src/components/NewIssueDialog.tsx", + "ui/src/components/NewProjectDialog.tsx", + "ui/src/components/PathInstructionsModal.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/dialogs-modals.stories.tsx" + ], + "fingerprint": "92e635333d20802c9677c94bc00eff89a6b65fbdef225b9701e71b5919a6ddb5" + }, + { + "file": "ui/storybook/stories/document-annotations.stories.tsx", + "capabilities": [ + "documents-artifacts/annotations" + ], + "purpose": "Product/Documents/Annotations", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "ui/src/components/DocumentAnnotationLayer.tsx", + "ui/src/components/DocumentAnnotationPanel.tsx", + "ui/src/components/IssueDocumentAnnotations.tsx", + "ui/src/components/IssueDocumentsSection.tsx", + "ui/src/components/MarkdownBody.tsx", + "ui/src/components/MarkdownEditor.tsx", + "ui/storybook/stories/document-annotations.stories.tsx" + ], + "fingerprint": "36a016bab626258ff76af00b5697ef622a29e19f7032d241ebedd6550ff837f8" + }, + { + "file": "ui/storybook/stories/document-comments.stories.tsx", + "capabilities": [ + "documents-artifacts/annotations" + ], + "purpose": "Product/Document Comments", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "ui/src/components/DocumentAnnotationLayer.tsx", + "ui/src/components/DocumentAnnotationPanel.tsx", + "ui/storybook/stories/document-comments.stories.tsx" + ], + "fingerprint": "7abfc302970dd3cc86ac621735b88a368baf216947b674a6b4283cdaf7f31c03" + }, + { + "file": "ui/storybook/stories/dot-runner-connection.stories.tsx", + "capabilities": [ + "runs-adapters/validation", + "gateways-profiles/client-connect" + ], + "purpose": "Assistant connections/Dot Runner", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "5dd7b6158480717fe85fe65a7df9323fc753ec3c673cf9bed002304c3e87cbc0" + }, + { + "file": "ui/storybook/stories/enterpret-connect-flow.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "connection-setup/failure" + ], + "purpose": "Apps/Enterpret connector", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "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" + ], + "fingerprint": "d03b56c9a89770a5f4222d0567be3c98aa4c878732098c4dcf2573f54cc5bb2d" + }, + { + "file": "ui/storybook/stories/environment-variables-editor.stories.tsx", + "capabilities": [ + "secrets/runtime-delivery" + ], + "purpose": "Product/Environment Variables Editor", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/secrets.md", + "ui/src/components/environment-variables-editor/index.tsx", + "ui/storybook/stories/environment-variables-editor.stories.tsx" + ], + "fingerprint": "daf57dd13f3c746a473b4c9bd7996f0dd70c9bfef9c698d2eb581a40b6deac08" + }, + { + "file": "ui/storybook/stories/execution-blocker-notice.stories.tsx", + "capabilities": [ + "recovery/diagnosis" + ], + "purpose": "Task chat/Recovery notice", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/ExecutionBlockerNotice.tsx", + "ui/storybook/stories/execution-blocker-notice.stories.tsx" + ], + "fingerprint": "99fbecc373d993e752e8a89580492eecf947a54329f067cf468f97d18cd328b6" + }, + { + "file": "ui/storybook/stories/execution-recovery.stories.tsx", + "capabilities": [ + "recovery/diagnosis" + ], + "purpose": "Tasks/Execution recovery", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/ActiveAgentsPanel.tsx", + "ui/src/components/IssueRow.tsx", + "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" + ], + "fingerprint": "d726c8a489acdd94563d30b8a0c8e48c965d3bd429fbe2a2463d4d6c6c065b28" + }, + { + "file": "ui/storybook/stories/external-agent-invite/components.stories.tsx", + "capabilities": [ + "agents/hire", + "access/invitations" + ], + "purpose": "Onboarding/External agent invitation/Components", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "456e1d9cfad730f3fc7d8c003bb4ab4296417e3869f8d7acbc360d3337f5cb58" + }, + { + "file": "ui/storybook/stories/external-agent-invite/journeys.stories.tsx", + "capabilities": [ + "agents/hire", + "access/invitations" + ], + "purpose": "Onboarding/External agent invitation/Journeys", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/agents.md", + "ui/src/components/AnimatedDialogContent.tsx", + "ui/src/components/Layout.tsx", + "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" + ], + "fingerprint": "9f79299cb00018bddaccd36024e79a5876b9543fdd772938cced8c38a3b3823c" + }, + { + "file": "ui/storybook/stories/external-objects.stories.tsx", + "capabilities": [ + "tasks/properties" + ], + "purpose": "Foundations/External Objects", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "ui/src/components/ExternalObjectPill.tsx", + "ui/src/components/ExternalObjectStatusIcon.tsx", + "ui/src/components/ExternalObjectStatusSummary.tsx", + "ui/src/components/IssueFiltersPopover.tsx", + "ui/src/components/IssueProperties.tsx", + "ui/src/components/IssueRelatedWorkPanel.tsx", + "ui/src/components/IssueRow.tsx", + "ui/src/components/MarkdownBody.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/external-objects.stories.tsx" + ], + "fingerprint": "2e6a73b716687244aee6f93214c025bfe755ce41a4aa6bd65a37a4d6d3275596" + }, + { + "file": "ui/storybook/stories/fast-responses/01-settings.stories.tsx", + "capabilities": [ + "companies/identity", + "budgets-costs/cost-reporting" + ], + "purpose": "Fast responses/01 Settings", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "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.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "4cf2ba38415e1a07a1e265858961d5414ef19bc2090b4b93c4b18cb5e691310d" + }, + { + "file": "ui/storybook/stories/fast-responses/02-history.stories.tsx", + "capabilities": [ + "companies/identity", + "budgets-costs/cost-reporting" + ], + "purpose": "Fast responses/02 History", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shared production DecisionHistoryTable receives fastResponse=true, matching FastResponseHistory presentation; API loading/error and feature-gate wrapper are outside this story.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "c123c70c4cdc78548a5c1d50777f456946366cf532ac8e01ab48a625d3fbc285" + }, + { + "file": "ui/storybook/stories/file-viewer.stories.tsx", + "capabilities": [ + "documents-artifacts/attachments" + ], + "purpose": "Components/File Viewer Sheet", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "ui/src/components/FileViewerSheet.tsx", + "ui/storybook/stories/file-viewer.stories.tsx" + ], + "fingerprint": "a3d440e82f0a0f537dbe3634770e807ca21cab8b567d2eb3ac48780b67f72790" + }, + { + "file": "ui/storybook/stories/fireflies-pr.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "routines/triggers" + ], + "purpose": "PR reviews/Fireflies and app webhooks", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "maps/feature-map/routines.md", + "ui/src/components/Layout.tsx", + "ui/src/components/RoutineTriggerCard.tsx", + "ui/src/components/routine-sections/context.tsx", + "ui/src/components/routine-sections/editable-sections.production.tsx", + "ui/src/components/routine-triggers/TriggerWizard.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/src/pages/RoutineDetail.tsx", + "ui/src/pages/Routines.tsx", + "ui/src/pages/apps/AppLogo.tsx", + "ui/src/pages/apps/Browse.tsx", + "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" + ], + "fingerprint": "0dc5bda5ecbb676ba9758350884e51ebe017a0e17b24802107a1472296acae51" + }, + { + "file": "ui/storybook/stories/fork-skill-flow.stories.tsx", + "capabilities": [ + "skills/authoring" + ], + "purpose": "Skill Studio/EditACopy", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "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" + ], + "fingerprint": "158ff9882eec7349de17fe68bfe1470a925b7f272fd8f82450b6f2100c58f6b5" + }, + { + "file": "ui/storybook/stories/forms-editors.stories.tsx", + "capabilities": [], + "purpose": "Components/Forms & Editors", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "ui/src/components/ExecutionParticipantPicker.tsx", + "ui/src/components/FoldCurtain.tsx", + "ui/src/components/InlineEditor.tsx", + "ui/src/components/InlineEntitySelector.tsx", + "ui/src/components/JsonSchemaForm.tsx", + "ui/src/components/MarkdownBody.tsx", + "ui/src/components/MarkdownEditor.tsx", + "ui/src/components/ReportsToPicker.tsx", + "ui/src/components/RoutineRunVariablesDialog.tsx", + "ui/src/components/RoutineVariablesEditor.tsx", + "ui/src/components/ScheduleEditor.tsx", + "ui/src/components/environment-variables-editor/index.tsx", + "ui/src/components/ui/badge.tsx", + "ui/src/components/ui/button.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/forms-editors.stories.tsx" + ], + "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", + "fingerprint": "1e30e2c2e33d155a068ccbc1a5709d1ea5d40ad8d87fe81c9981dd19fd2fb497" + }, + { + "file": "ui/storybook/stories/foundations.stories.tsx", + "capabilities": [], + "purpose": "Foundations/Primitive Matrix", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "ui/src/components/ui/badge.tsx", + "ui/src/components/ui/button.tsx", + "ui/src/components/ui/card.tsx", + "ui/src/components/ui/checkbox.tsx", + "ui/src/components/ui/dialog.tsx", + "ui/src/components/ui/input.tsx", + "ui/src/components/ui/label.tsx", + "ui/src/components/ui/popover.tsx", + "ui/src/components/ui/select.tsx", + "ui/src/components/ui/separator.tsx", + "ui/src/components/ui/tabs.tsx", + "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" + ], + "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", + "fingerprint": "d6d2f239b4d934521156ed03cc515de419e02a48256fc33aab9cb0fc9b57c078" + }, + { + "file": "ui/storybook/stories/frontmatter-panel.stories.tsx", + "capabilities": [ + "skills/authoring" + ], + "purpose": "Product/Skill Studio \u00b7 FrontmatterPanel", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/components/FrontmatterPanel.tsx", + "ui/storybook/stories/frontmatter-panel.stories.tsx" + ], + "fingerprint": "0bf948fb2bad1159d2415df2d2d50e106ef696f6a259dcf6dc4afe15c9765fe6" + }, + { + "file": "ui/storybook/stories/gateways-tab.stories.tsx", + "capabilities": [ + "gateways-profiles/gateway" + ], + "purpose": "Tools/Gateways (PAP-11182)", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/gateways-profiles.md", + "ui/src/pages/tools/GatewaysTab.tsx", + "ui/storybook/stories/gateways-tab.stories.tsx" + ], + "fingerprint": "ae5af9816de7c7159e3a26d86cbf69ede2f9a58b43f272a03849b2e490a66016" + }, + { + "file": "ui/storybook/stories/github-bot-management/management.stories.tsx", + "capabilities": [ + "chat-channels/providers", + "chat-channels/conversation" + ], + "purpose": "Connectors/GitHub bot management", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "ui/src/components/Layout.tsx", + "ui/src/components/OnboardingWizard.tsx", + "ui/src/pages/apps/chat/ChatConversationList.tsx", + "ui/src/pages/apps/chat/ChatEndpointDetail.tsx", + "ui/src/pages/apps/chat/GitHubAppIdentity.tsx", + "ui/src/pages/apps/chat/GitHubBotConfiguration.tsx", + "ui/src/pages/apps/chat/GitHubBotManagement.tsx", + "ui/src/pages/apps/chat/GitHubChatSetup.tsx", + "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" + ], + "fingerprint": "b48f3a6a4aae5c83d4a8481105c6d2e80d80c694006e2f18804f1a4eed107fb5" + }, + { + "file": "ui/storybook/stories/github-chat.stories.tsx", + "capabilities": [ + "chat-channels/providers", + "chat-channels/conversation" + ], + "purpose": "Historical/GitHub chat prototypes", + "status": "historical", + "implementation": "prototype", + "boundary": "fixtures", + "notes": "Historical wizard retained for original setup/access/review design; current GitHub setup is ui/src/pages/apps/chat/GitHubChatSetup.tsx.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "ui/src/components/GitHubAgentTrustWarning.tsx", + "ui/src/components/SetupWizard.tsx", + "ui/src/pages/apps/chat/GitHubSetupPrompt.tsx", + "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" + ], + "replacement": "ui/storybook/stories/github-connections.stories.tsx", + "fingerprint": "f110f2f0ccee9e5bc8eb633f2e6cac4e4aea432232cdd702fd233277380a7028" + }, + { + "file": "ui/storybook/stories/github-connections.stories.tsx", + "capabilities": [ + "chat-channels/providers", + "connection-setup/channel-setup" + ], + "purpose": "Connections/GitHub and Code Review Bot", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "maps/feature-map/connection-setup.md", + "ui/src/components/SetupWizard.tsx", + "ui/src/pages/apps/AppsConnect.tsx", + "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" + ], + "fingerprint": "2932e77ea9103b6c08585123cc4ca4bcdd35ab5c9539f70e2b30bae165adc3cb" + }, + { + "file": "ui/storybook/stories/github-skills-journey.stories.tsx", + "capabilities": [ + "skills/versions", + "skills/discovery" + ], + "purpose": "Skills/GitHub sync journey", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/components/Layout.tsx", + "ui/src/pages/CompanySkills.tsx", + "ui/src/pages/SkillSources.tsx", + "ui/src/pages/SkillStudio.tsx", + "ui/storybook/fixtures/githubSkillSources.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/github-skills-journey.stories.tsx" + ], + "fingerprint": "c4d5daba6e1ced0fea63533094e2ecc25c14bdab7e078a61c1aac95184fe3bc6" + }, + { + "file": "ui/storybook/stories/github-synced-skills.stories.tsx", + "capabilities": [ + "skills/versions", + "skills/discovery" + ], + "purpose": "Skills/GitHub synced skills", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/pages/SkillSources.tsx", + "ui/storybook/fixtures/githubSkillSources.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/github-synced-skills.stories.tsx" + ], + "fingerprint": "56e11ea7e42f58754b347286ac84df240314d3fc6b2d973b1df1215985d89de9" + }, + { + "file": "ui/storybook/stories/html-artifacts/01-preview.stories.tsx", + "capabilities": [ + "documents-artifacts/attachments", + "workspaces/files-git" + ], + "purpose": "HTML artifacts/01 Preview", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "eb93ebf603a4ba1d7103e49d2a7486bdcc3fe02aa8c87c1bbbbe165fde24bd6d" + }, + { + "file": "ui/storybook/stories/html-artifacts/02-workspace.stories.tsx", + "capabilities": [ + "documents-artifacts/attachments", + "workspaces/files-git" + ], + "purpose": "HTML artifacts/02 Workspace", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "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" + ], + "fingerprint": "a20420d26e42635529e7b298376a27edf3ff761ed7de134c5349bd5b9934198f" + }, + { + "file": "ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx", + "capabilities": [ + "documents-artifacts/attachments", + "workspaces/files-git" + ], + "purpose": "HTML artifacts/03 Task journey", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "maps/feature-map/workspaces.md", + "ui/src/components/Layout.tsx", + "ui/src/components/artifacts/IssueArtifactCard.tsx", + "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" + ], + "fingerprint": "2d4ab0475f66fea01b18ddd3a54694c7ed94fd749dc457c8f134de20b9faea78" + }, + { + "file": "ui/storybook/stories/imessage-photon.stories.tsx", + "capabilities": [ + "chat-channels/conversation" + ], + "purpose": "Connections/iMessage Photon", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "ui/src/components/task-chat/TaskChatBubble.tsx", + "ui/src/components/task-chat/task-chat-model.ts", + "ui/src/pages/apps/Browse.tsx", + "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" + ], + "fingerprint": "3bd3147aaf8c0eb0df017ddd3a10c0a11f8429907ac9d24049e8b507224d7da6" + }, + { + "file": "ui/storybook/stories/in-feed-connections.stories.tsx", + "capabilities": [ + "connection-setup/task-request" + ], + "purpose": "Connections/In-task connections", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/components/task-chat/TaskChatComposer.tsx", + "ui/src/components/task-chat/TaskChatInteractionCard.tsx", + "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" + ], + "fingerprint": "91d582c9624c38820c4d6991c3ea16c7dda10be7ea5122e8a97b63e34d4c849a" + }, + { + "file": "ui/storybook/stories/interrupt-handoff.stories.tsx", + "capabilities": [ + "steering/interrupt" + ], + "purpose": "Surfaces/Interrupt Handoff", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/steering.md", + "ui/src/components/interrupt-handoff/InterruptHandoffViews.tsx", + "ui/storybook/stories/interrupt-handoff.stories.tsx" + ], + "fingerprint": "975a75361986c904fb485958695acbf13f100b9ce4652e8eb4c0a032e5b9c9a1" + }, + { + "file": "ui/storybook/stories/issue-blocked-notice.stories.tsx", + "capabilities": [ + "recovery/diagnosis", + "task-coordination/dependencies" + ], + "purpose": "Product/Issue/Blocked notice", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "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" + ], + "fingerprint": "439f467f261680b59ef3772406f9f6bf1fdeb68c2d820cb10e055ae5283589d6" + }, + { + "file": "ui/storybook/stories/issue-management.stories.tsx", + "capabilities": [ + "tasks/properties", + "tasks/organize" + ], + "purpose": "Product/Issue Management", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "ui/src/components/Identity.tsx", + "ui/src/components/IssueColumns.tsx", + "ui/src/components/IssueContinuationHandoff.tsx", + "ui/src/components/IssueDocumentsSection.tsx", + "ui/src/components/IssueFiltersPopover.tsx", + "ui/src/components/IssueGroupHeader.tsx", + "ui/src/components/IssueLinkQuicklook.tsx", + "ui/src/components/IssueProperties.tsx", + "ui/src/components/IssueRunLedger.tsx", + "ui/src/components/IssueWorkspaceCard.tsx", + "ui/src/components/IssuesList.tsx", + "ui/src/components/IssuesQuicklook.tsx", + "ui/src/components/PriorityIcon.tsx", + "ui/src/components/StatusBadge.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/issue-management.stories.tsx" + ], + "fingerprint": "a5012bece16d1825dbabc03512795d082ebcd08e55cedf04b05fcef82e0f4395" + }, + { + "file": "ui/storybook/stories/issue-plan-decompositions.stories.tsx", + "capabilities": [ + "questions-and-approvals/plan-review", + "task-coordination/delegation" + ], + "purpose": "Issue Detail/Plan Decompositions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/questions-and-approvals.md", + "maps/feature-map/task-coordination.md", + "ui/src/components/IssuePlanDecompositionsSection.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/issue-plan-decompositions.stories.tsx" + ], + "fingerprint": "b527e5525ef4f4e3b0b834cf22e423e2c369692b887243f01cc4d6b5ebfa5875" + }, + { + "file": "ui/storybook/stories/issue-review-panel.stories.tsx", + "capabilities": [ + "task-coordination/signoff" + ], + "purpose": "Product/Decisions/Stalled review actions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/task-coordination.md", + "ui/src/components/AttentionQueueRow.tsx", + "ui/storybook/stories/issue-review-panel.stories.tsx" + ], + "fingerprint": "089b43a36b1cc8cd336f81a5fc654607ffaadcde51a6ace883fc7023850680aa" + }, + { + "file": "ui/storybook/stories/issue-thread-interactions.stories.tsx", + "capabilities": [ + "questions-and-approvals/questions", + "questions-and-approvals/confirmations", + "questions-and-approvals/audience" + ], + "purpose": "Chat & Comments/Issue Thread Interactions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/questions-and-approvals.md", + "ui/src/components/IssueChatThread.tsx", + "ui/src/components/IssueThreadInteractionCard.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/issue-thread-interactions.stories.tsx" + ], + "fingerprint": "80ba300809eb79e06600ae4af00a6d9c22c6b83abacb10ba2b6587ffd6092e77" + }, + { + "file": "ui/storybook/stories/local-ai-subscription.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Provider routing/07 Subscription sign-in", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/AdapterLoginChrome.tsx", + "ui/storybook/stories/local-ai-subscription.stories.tsx" + ], + "fingerprint": "d53b62241b00a9c42cd7caa1c7aa2f6254c48331fce73cb42ccb62e3648744cb" + }, + { + "file": "ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx", + "capabilities": [ + "connection-setup/handoff" + ], + "purpose": "Apps/Managed Cloud OAuth handoff", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/pages/apps/PaperclipCloudOAuthHandoff.tsx", + "ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx" + ], + "fingerprint": "8e8abadcb4a6601e5c750843a5ce6a15c8126a72a5d810d15683e36706823fa6" + }, + { + "file": "ui/storybook/stories/memory-connectors.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "agents/instructions" + ], + "purpose": "Apps/Connections/Memory", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "maps/feature-map/connection-setup.md", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/src/pages/InstanceExperimentalSettings.tsx", + "ui/src/pages/apps/Browse.tsx", + "ui/storybook/stories/memory-connectors.stories.tsx" + ], + "fingerprint": "5b5206e62ff639874206741e6fa420b80bef9e4bda804c5d2d61f4786d8081ec" + }, + { + "file": "ui/storybook/stories/mobile-entity-pickers.stories.tsx", + "capabilities": [ + "tasks/create" + ], + "purpose": "Components/Entity pickers/Mobile", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "ui/src/components/InlineEntitySelector.tsx", + "ui/src/components/SearchableSelect.tsx", + "ui/storybook/stories/mobile-entity-pickers.stories.tsx" + ], + "fingerprint": "5a1fc8e5d98b3cb562cc80462d90991b8d74b99df2b8842439ef4038116d3af7" + }, + { + "file": "ui/storybook/stories/mobile-task-tabs.stories.tsx", + "capabilities": [ + "navigation-preferences/navigation" + ], + "purpose": "Prototypes/Task detail/Mobile tabs", + "status": "proposed", + "implementation": "prototype", + "boundary": "fixtures", + "notes": "Local composition retained for its original design purpose; full production parity remains unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/navigation-preferences.md", + "ui/src/components/side-panel/index.ts", + "ui/storybook/stories/mobile-task-tabs.stories.tsx" + ], + "fingerprint": "ee708c2b2bcbc41dcdddb48738ba2dc52f41e9e304604d2b441eca3cfcc8be45" + }, + { + "file": "ui/storybook/stories/model-capacity-retry.stories.tsx", + "capabilities": [ + "recovery/bounded-continuation" + ], + "purpose": "Tasks/Model capacity retry", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/IssueScheduledRetryCard.tsx", + "ui/storybook/stories/model-capacity-retry.stories.tsx" + ], + "fingerprint": "55e83f93b4ecca792c37f241a040e61315cb320b7b98e4b2cf06d6fbe8547f8f" + }, + { + "file": "ui/storybook/stories/monitor-surfaces.stories.tsx", + "capabilities": [ + "task-coordination/tree-control" + ], + "purpose": "Product/Issue Monitor surfaces", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/task-coordination.md", + "ui/src/components/IssueMonitorBanner.tsx", + "ui/src/components/IssueProperties.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/monitor-surfaces.stories.tsx" + ], + "fingerprint": "7b62af0430a4924c27c06ad8ecdfe9f13e9b9207640b18142611176291589b23" + }, + { + "file": "ui/storybook/stories/navigation-layout.stories.tsx", + "capabilities": [ + "navigation-preferences/navigation" + ], + "purpose": "Product/Navigation & Layout", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/navigation-preferences.md", + "ui/src/components/BreadcrumbBar.tsx", + "ui/src/components/CommandPalette.tsx", + "ui/src/components/CompanySwitcher.tsx", + "ui/src/components/KeyboardShortcutsCheatsheet.tsx", + "ui/src/components/MobileBottomNav.tsx", + "ui/src/components/PageTabBar.tsx", + "ui/src/components/Sidebar.tsx", + "ui/src/components/SidebarAccountMenu.tsx", + "ui/src/components/SidebarCompanyMenu.tsx", + "ui/src/components/StatusBadge.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/navigation-layout.stories.tsx" + ], + "fingerprint": "322ff8736c38f3c9c0778a2ad232edc916daaf170905330a1594000f17a9b025" + }, + { + "file": "ui/storybook/stories/new-agent-onboarding.stories.tsx", + "capabilities": [ + "agents/hire" + ], + "purpose": "Onboarding/New agent", + "status": "historical", + "implementation": "prototype", + "boundary": "fixtures", + "notes": "Retained local wizard predates production ui/src/components/new-agent flow; shared fields do not make the wizard current.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "ui/src/components/AdapterLoginChrome.tsx", + "ui/src/components/AgentConfigForm.tsx", + "ui/src/components/NewIssueDialog.tsx", + "ui/src/components/RuntimeTestCard.tsx", + "ui/src/components/agent-config-primitives.tsx", + "ui/src/components/new-agent/AgentBasicsDialog.tsx", + "ui/src/components/onboarding/CredentialModeLink.tsx", + "ui/src/components/onboarding/FooterNav.tsx", + "ui/src/components/onboarding/ModelSourceTiles.tsx", + "ui/src/components/onboarding/OnboardingPrimitives.tsx", + "ui/src/components/onboarding/PillGuy.tsx", + "ui/src/components/onboarding/onboarding-motion.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/NewAgentWizard.tsx", + "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" + ], + "replacement": "ui/storybook/stories/agent-persona-pages.stories.tsx", + "fingerprint": "a4172933b445ae3b6d73008e4fa2b6988c3ef722602ef82f363e288d354441b2" + }, + { + "file": "ui/storybook/stories/new-project-repos.stories.tsx", + "capabilities": [ + "projects/repositories" + ], + "purpose": "Proposals/Project repos/New project", + "status": "proposed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "RepositoryEditor is shipped, but NewProjectPrototype composes its own creation flow. Preserve proposal until route parity is checked.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/projects.md", + "ui/src/components/RepositoryEditor.tsx", + "ui/src/components/SearchableSelect.tsx", + "ui/src/components/icons/github-icon.tsx", + "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" + ], + "fingerprint": "97b3022dc7fcaae73f24d9d486803c6658463849a99ec15aec72d8c2825fc25f" + }, + { + "file": "ui/storybook/stories/new-task-composer.stories.tsx", + "capabilities": [ + "tasks/create" + ], + "purpose": "Composer/New task", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "ui/src/components/MarkdownBody.tsx", + "ui/src/components/NewIssueDialog.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/new-task-composer.stories.tsx" + ], + "fingerprint": "91f49f5ebddbbb2e5d893787c49ddbe9b3a00508ba107f1ff55a4077647d4129" + }, + { + "file": "ui/storybook/stories/notion-connect-flow.stories.tsx", + "capabilities": [ + "connection-setup/credentials", + "connection-setup/failure" + ], + "purpose": "Apps/Notion MCP connect flow (PAP-16650)", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/pages/apps/AppLogo.tsx", + "ui/src/pages/apps/AppsConnect.tsx", + "ui/src/pages/apps/Browse.tsx", + "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" + ], + "fingerprint": "059bfb1db9c3d71dca7c10ff6440f588c539d6bb0923007f1b3360b7b322a016" + }, + { + "file": "ui/storybook/stories/onboarding-agent-arc.stories.tsx", + "capabilities": [ + "onboarding/adapter", + "onboarding/first-task" + ], + "purpose": "Onboarding/Agent arc", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/onboarding.md", + "ui/src/components/OnboardingWizard.tsx", + "ui/src/components/onboarding/PillGuy.tsx", + "ui/src/components/onboarding/Stepper.tsx", + "ui/storybook/fixtures/onboardingDraft.ts", + "ui/storybook/fixtures/onboardingEnvironment.ts", + "ui/storybook/stories/onboarding-agent-arc.stories.tsx" + ], + "fingerprint": "74ccb2cd806467152cdd9732e9de09c86b88934364ae50932c3e7d5c5bc87b6f" + }, + { + "file": "ui/storybook/stories/onboarding-character.stories.tsx", + "capabilities": [ + "onboarding/company" + ], + "purpose": "Onboarding/Character", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/onboarding.md", + "ui/src/components/onboarding/OnboardingCharacter.tsx", + "ui/src/components/ui/button.tsx", + "ui/storybook/stories/onboarding-character.stories.tsx" + ], + "fingerprint": "59566e6ec1b21ccc51e69c7c3a8114594ca4ddb507dfaf09724a28745f8d4f16" + }, + { + "file": "ui/storybook/stories/onboarding-connect-model.stories.tsx", + "capabilities": [ + "onboarding/adapter", + "onboarding/first-task" + ], + "purpose": "Onboarding/Connect a model", + "status": "historical", + "implementation": "prototype", + "boundary": "fixtures", + "notes": "Older tile/mode preview; onboarding-agent-arc mounts the production wizard.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/onboarding.md", + "ui/src/components/onboarding/ConnectModelPreview.tsx", + "ui/storybook/stories/onboarding-connect-model.stories.tsx" + ], + "replacement": "ui/storybook/stories/onboarding-agent-arc.stories.tsx", + "fingerprint": "04ff3c06366ee28c99034af68cbb3935aecdba8c5d106c08124cacc0a0d5a8fc" + }, + { + "file": "ui/storybook/stories/originating-tasks.stories.tsx", + "capabilities": [ + "task-coordination/delegation", + "projects/task-context" + ], + "purpose": "UX Labs/Tasks Created From a Task", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/projects.md", + "maps/feature-map/task-coordination.md", + "ui/src/components/Layout.tsx", + "ui/src/components/task-detail/TaskDetailTasksPanel.tsx", + "ui/src/pages/IssueDetail.tsx", + "ui/src/pages/ProjectDetail.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/originating-tasks/OriginatingTasks.tsx", + "ui/storybook/stories/originating-tasks.stories.tsx" + ], + "fingerprint": "8529ab64f5d73a48dd0c0fba0ad6de97eb7ae849bc9b87f6d982a0b8cb42965c" + }, + { + "file": "ui/storybook/stories/overview.stories.tsx", + "capabilities": [], + "purpose": "Overview/Storybook Guide", + "status": "unreviewed", + "implementation": "guide", + "boundary": "static", + "notes": "Generated inventory counts replace stale hand-maintained Planned/Covered claims; no execution coverage is implied.", + "reviewedAt": "2026-10-12", + "sources": [ + "ui/src/components/ui/badge.tsx", + "ui/src/components/ui/input.tsx", + "ui/storybook/stories/overview.stories.tsx" + ], + "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", + "fingerprint": "e4937a04090633914db07616816556caa1b980e0b1cbb9f9b9d132094f960a6d" + }, + { + "file": "ui/storybook/stories/paused-composer.stories.tsx", + "capabilities": [ + "steering/stop-and-pause" + ], + "purpose": "Composer/Paused task takeover", + "status": "historical", + "implementation": "prototype", + "boundary": "fixtures", + "notes": "Retained local paused takeover; task-execution-controls exercises the shipped pause/stop controls.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/steering.md", + "ui/src/components/task-chat/TaskChatComposer.tsx", + "ui/storybook/prototypes/PausedTaskComposer.tsx", + "ui/storybook/stories/paused-composer.stories.tsx" + ], + "replacement": "ui/storybook/stories/task-execution-controls.stories.tsx", + "fingerprint": "c186d26498e51279f1a262773ccaff918c4f15d8c58f3c1068bd697a6d511a16" + }, + { + "file": "ui/storybook/stories/permitted-vs-installed.stories.tsx", + "capabilities": [ + "app-permissions/agent-access", + "app-permissions/action-policy" + ], + "purpose": "Tools/Permitted vs Installed", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/app-permissions.md", + "ui/src/components/IssueThreadInteractionCard.tsx", + "ui/src/pages/AgentToolsTab.tsx", + "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" + ], + "fingerprint": "b87ffd90db211d079fe708638c65734bd95b07b379ca679e2f1f532fb65c1ea0" + }, + { + "file": "ui/storybook/stories/personal-connection-identity.stories.tsx", + "capabilities": [ + "connection-setup/identity-and-access" + ], + "purpose": "Reviews/PAP-17835 Personal connection identity", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/connection-setup.md", + "ui/src/pages/apps/app-detail/IdentitiesSection.tsx", + "ui/storybook/stories/personal-connection-identity.stories.tsx" + ], + "fingerprint": "36c0da3501cf320bffa467227e0ad4cd02d9293f400dfeff43a3e633ca179adb" + }, + { + "file": "ui/storybook/stories/primary-agent/00-review-guide.stories.tsx", + "capabilities": [ + "agents/organization", + "tasks/create", + "agent-chat/discovery" + ], + "purpose": "Primary Agent/00 Review guide", + "status": "unreviewed", + "implementation": "guide", + "boundary": "static", + "notes": "Review guide retained; explanatory content does not establish runtime or production coverage.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "463e3e9c850aa58719b16f21a4aef72856f612ca825e15b6052845008c927370" + }, + { + "file": "ui/storybook/stories/primary-agent/01-components.stories.tsx", + "capabilities": [ + "agents/organization", + "tasks/create", + "agent-chat/discovery" + ], + "purpose": "Primary Agent/01 Components", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "maps/feature-map/agents.md", + "maps/feature-map/tasks.md", + "ui/src/components/AgentIdentity.tsx", + "ui/src/components/Layout.production.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgents.tsx", + "ui/src/components/primary-agent/PrimaryAgentPresentation.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "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" + ], + "fingerprint": "5d6db5bda14b16e0dfec87a3d44e8e805ceefde034b53774d948392edcbb2373" + }, + { + "file": "ui/storybook/stories/primary-agent/02-sidebar.stories.tsx", + "capabilities": [ + "agents/organization", + "tasks/create", + "agent-chat/discovery" + ], + "purpose": "Primary Agent/02 Sidebar", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "maps/feature-map/agents.md", + "maps/feature-map/tasks.md", + "ui/src/components/Layout.production.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgents.tsx", + "ui/src/components/primary-agent/PrimaryAgentPresentation.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "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" + ], + "fingerprint": "7407f13fb2987fbd52b0adc72dda0eac39ab209005179b999ad3e1ed4f4b85d2" + }, + { + "file": "ui/storybook/stories/primary-agent/03-agents.stories.tsx", + "capabilities": [ + "agents/organization", + "tasks/create", + "agent-chat/discovery" + ], + "purpose": "Primary Agent/03 Agents", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "maps/feature-map/agents.md", + "maps/feature-map/tasks.md", + "ui/src/components/Layout.production.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgents.tsx", + "ui/src/components/primary-agent/PrimaryAgentPresentation.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "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" + ], + "fingerprint": "1713ccdafd4b46cf1b91ee6bf3c13c4bae35d2546793a6756b370261df175ef0" + }, + { + "file": "ui/storybook/stories/primary-agent/04-new-task.stories.tsx", + "capabilities": [ + "agents/organization", + "tasks/create", + "agent-chat/discovery" + ], + "purpose": "Primary Agent/04 New task", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "maps/feature-map/agents.md", + "maps/feature-map/tasks.md", + "ui/src/components/Layout.production.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgents.tsx", + "ui/src/components/primary-agent/PrimaryAgentPresentation.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "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" + ], + "fingerprint": "ead0839536fb6b3d24449548e4a67cab23d1f704e7753ea1918eb734740c880f" + }, + { + "file": "ui/storybook/stories/primary-agent/05-chat.stories.tsx", + "capabilities": [ + "agents/organization", + "tasks/create", + "agent-chat/discovery" + ], + "purpose": "Primary Agent/05 Chat", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "maps/feature-map/agents.md", + "maps/feature-map/tasks.md", + "ui/src/components/Layout.production.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgents.tsx", + "ui/src/components/primary-agent/PrimaryAgentPresentation.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "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" + ], + "fingerprint": "b2c0128668180437fb0f416693e9cd91faa272b1dd8e1d376d67623873fb66b1" + }, + { + "file": "ui/storybook/stories/primary-agent/06-journeys.stories.tsx", + "capabilities": [ + "agents/organization", + "tasks/create", + "agent-chat/discovery" + ], + "purpose": "Primary Agent/06 Journeys", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "maps/feature-map/agents.md", + "maps/feature-map/tasks.md", + "ui/src/components/Layout.production.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgents.tsx", + "ui/src/components/primary-agent/PrimaryAgentPresentation.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "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" + ], + "fingerprint": "2dadd05767979d2e9cc2b17486bb33648cb7edc2ef0310ad176854d9351758fc" + }, + { + "file": "ui/storybook/stories/primary-agent/07-confirmation.stories.tsx", + "capabilities": [ + "agents/organization", + "tasks/create", + "agent-chat/discovery" + ], + "purpose": "Primary Agent/07 Confirmation", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agent-chat.md", + "maps/feature-map/agents.md", + "maps/feature-map/tasks.md", + "ui/src/components/Layout.production.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/SidebarAgents.tsx", + "ui/src/components/primary-agent/PrimaryAgentPresentation.tsx", + "ui/src/pages/AgentChat.tsx", + "ui/src/pages/AgentChats.tsx", + "ui/src/pages/AgentDetail.tsx", + "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" + ], + "fingerprint": "6d3a3ce92995071c644c1032a3c9a3e9551af080e7c5c18507146428d6c7d49d" + }, + { + "file": "ui/storybook/stories/primitives-coverage.stories.tsx", + "capabilities": [], + "purpose": "Foundations/Primitive Coverage", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "ui/src/components/ui/alert-dialog.tsx", + "ui/src/components/ui/avatar.tsx", + "ui/src/components/ui/breadcrumb.tsx", + "ui/src/components/ui/button.tsx", + "ui/src/components/ui/collapsible.tsx", + "ui/src/components/ui/command.tsx", + "ui/src/components/ui/dropdown-menu.tsx", + "ui/src/components/ui/radio-card.tsx", + "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" + ], + "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", + "fingerprint": "be31785092ae0b06c86bcaa52241ebe2cc209325310c811417cb2d7134a2fa69" + }, + { + "file": "ui/storybook/stories/private-tasks/00-review-guide.stories.tsx", + "capabilities": [ + "access/resources", + "tasks/properties" + ], + "purpose": "Private tasks/00 Review guide", + "status": "unreviewed", + "implementation": "guide", + "boundary": "static", + "notes": "Review guide retained; explanatory content does not establish runtime or production coverage.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/tasks.md", + "ui/storybook/stories/private-tasks/00-review-guide.stories.tsx" + ], + "fingerprint": "bc7b2ff37bfb9d66ee562875119b3ca03fc7ae19ce749f1e06dcd4a3364574ab" + }, + { + "file": "ui/storybook/stories/private-tasks/01-creation.stories.tsx", + "capabilities": [ + "access/resources", + "tasks/properties" + ], + "purpose": "Private tasks/01 Creation", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/tasks.md", + "ui/src/components/Layout.tsx", + "ui/src/components/ToastViewport.tsx", + "ui/src/pages/DesignGuide.tsx", + "ui/src/pages/IssueDetail.tsx", + "ui/src/pages/Issues.tsx", + "ui/src/pages/ProjectDetail.tsx", + "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" + ], + "fingerprint": "cacab6c556db61f247ba64a80a9785b8d4bda1292a255d689ed5b6fc6bdc3428" + }, + { + "file": "ui/storybook/stories/private-tasks/02-sharing.stories.tsx", + "capabilities": [ + "access/resources", + "tasks/properties" + ], + "purpose": "Private tasks/02 Sharing", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/tasks.md", + "ui/src/components/IssueShareSheet.tsx", + "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" + ], + "fingerprint": "a24044c442953bd0cb1b197950b35640894d203e07fd1d3e02e042cc3ad263ed" + }, + { + "file": "ui/storybook/stories/private-tasks/03-task-actions.stories.tsx", + "capabilities": [ + "access/resources", + "tasks/properties" + ], + "purpose": "Private tasks/03 Task actions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/tasks.md", + "ui/src/components/IssuePrivacyActions.tsx", + "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" + ], + "fingerprint": "382ac5d8ae287988d64a5eb808be14e86d6e880122f8b0765befd099b965e45f" + }, + { + "file": "ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx", + "capabilities": [ + "access/resources", + "tasks/properties" + ], + "purpose": "Private tasks/04 References and blockers", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/tasks.md", + "ui/src/components/IssueBlockedNotice.tsx", + "ui/src/components/IssueReferencePill.tsx", + "ui/src/components/LockedIssueChip.tsx", + "ui/src/components/MarkdownBody.tsx", + "ui/src/components/ToastViewport.tsx", + "ui/src/components/issue-properties/relation-controls.tsx", + "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" + ], + "fingerprint": "993d88c52dc315938430be9a903a1de1f0a1b7ef3850ae6debab1ba0607cce24" + }, + { + "file": "ui/storybook/stories/private-tasks/05-projects.stories.tsx", + "capabilities": [ + "access/resources", + "tasks/properties", + "projects/lifecycle" + ], + "purpose": "Private tasks/05 Projects", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/projects.md", + "maps/feature-map/tasks.md", + "ui/src/components/IssueShareSheet.tsx", + "ui/src/components/ProjectAccessMembers.tsx", + "ui/src/components/ProjectProperties.tsx", + "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" + ], + "fingerprint": "6141c4eaacee9f826673d15cea001ca1ca327f386ec23da03e393ab96820e989" + }, + { + "file": "ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx", + "capabilities": [ + "access/resources", + "tasks/properties", + "projects/lifecycle" + ], + "purpose": "Private tasks/06 Full product pages", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/projects.md", + "maps/feature-map/tasks.md", + "ui/src/components/Layout.tsx", + "ui/src/components/ToastViewport.tsx", + "ui/src/pages/DesignGuide.tsx", + "ui/src/pages/IssueDetail.tsx", + "ui/src/pages/Issues.tsx", + "ui/src/pages/ProjectDetail.tsx", + "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" + ], + "fingerprint": "2acb548a73de6c8b7d6cdb39d9680018400a2739297309b6d0a4246301349ce6" + }, + { + "file": "ui/storybook/stories/private-tasks/07-user-stories.stories.tsx", + "capabilities": [ + "access/resources", + "tasks/properties" + ], + "purpose": "Private tasks/07 User stories", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/access.md", + "maps/feature-map/tasks.md", + "ui/src/components/IssueBlockedNotice.tsx", + "ui/src/components/IssuePrivacyActions.tsx", + "ui/src/components/IssueReferencePill.tsx", + "ui/src/components/IssueShareSheet.tsx", + "ui/src/components/Layout.tsx", + "ui/src/components/LockedIssueChip.tsx", + "ui/src/components/MarkdownBody.tsx", + "ui/src/components/ProjectAccessMembers.tsx", + "ui/src/components/ProjectProperties.tsx", + "ui/src/components/ToastViewport.tsx", + "ui/src/components/issue-properties/relation-controls.tsx", + "ui/src/components/task-detail/TaskDetailRelationsPanel.tsx", + "ui/src/pages/DesignGuide.tsx", + "ui/src/pages/IssueDetail.tsx", + "ui/src/pages/Issues.tsx", + "ui/src/pages/ProjectDetail.tsx", + "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" + ], + "fingerprint": "ec90dd616ca5b936fcd597d3da85b62b2f379a6b5308348b55ba60592f4e405d" + }, + { + "file": "ui/storybook/stories/project-execution-workspace-strategy.stories.tsx", + "capabilities": [ + "projects/defaults", + "workspaces/provisioning" + ], + "purpose": "Workspaces/Project runtime provision command", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/projects.md", + "maps/feature-map/workspaces.md", + "ui/src/components/ProjectProperties.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/project-execution-workspace-strategy.stories.tsx" + ], + "fingerprint": "cfb10722518a7748f98a9320cfae3234388902bdeee9c0ec54cfb9fd817039d2" + }, + { + "file": "ui/storybook/stories/project-repos-configuration.stories.tsx", + "capabilities": [ + "projects/repositories" + ], + "purpose": "Proposals/Project repos/Configuration", + "status": "proposed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Production properties plus local configuration page composition; repository interaction is simulated.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/projects.md", + "ui/src/components/PageTabBar.tsx", + "ui/src/components/ProjectProperties.tsx", + "ui/src/components/RepositoryEditor.tsx", + "ui/src/components/SearchableSelect.tsx", + "ui/src/components/icons/github-icon.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "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" + ], + "fingerprint": "9924dc5dd676d948318714f9ad76cdf08c47be36e4691833928a637ed6e4a03b" + }, + { + "file": "ui/storybook/stories/projects-goals-workspaces.stories.tsx", + "capabilities": [ + "projects/lifecycle", + "goals/hierarchy", + "workspaces/binding" + ], + "purpose": "Product/Projects Goals Workspaces", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/goals.md", + "maps/feature-map/projects.md", + "maps/feature-map/workspaces.md", + "ui/src/components/GoalProperties.tsx", + "ui/src/components/GoalTree.tsx", + "ui/src/components/ProjectProperties.tsx", + "ui/src/components/ProjectWorkspaceSummaryCard.tsx", + "ui/src/components/ProjectWorkspacesContent.tsx", + "ui/src/components/WorkspaceRuntimeControls.tsx", + "ui/src/components/WorktreeBanner.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/projects-goals-workspaces.stories.tsx" + ], + "fingerprint": "d1a5b5eced02dd205ae8acc07ebe41f29edfeb8fb38434a5c12f9d0927679a7e" + }, + { + "file": "ui/storybook/stories/provider-routing-00-overview.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Provider routing/00 Overview", + "status": "unreviewed", + "implementation": "guide", + "boundary": "static", + "notes": "Review guide retained; explanatory content does not establish runtime or production coverage.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "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" + ], + "fingerprint": "6e0da3867aacfd313e24b8b14494536c0dffe2c4927e79371bd263a19e5be30f" + }, + { + "file": "ui/storybook/stories/provider-routing-01-onboarding.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Provider routing/01 Onboarding", + "status": "mixed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/AdapterLoginChrome.tsx", + "ui/src/components/AdapterMark.tsx", + "ui/src/components/AgentActionButtons.tsx", + "ui/src/components/AgentConfigForm.tsx", + "ui/src/components/AgentContextualSidebar.tsx", + "ui/src/components/NewIssueDialog.tsx", + "ui/src/components/RuntimeTestCard.tsx", + "ui/src/components/agent-config-primitives.tsx", + "ui/src/components/ai-connections/AiConnectionManagement.tsx", + "ui/src/components/onboarding/CredentialModeLink.tsx", + "ui/src/components/onboarding/ModelSourceTiles.tsx", + "ui/src/components/onboarding/PillGuy.tsx", + "ui/src/features/connections/ConnectionChoiceList.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/src/pages/AgentDetail.tsx", + "ui/src/pages/AgentToolsTab.tsx", + "ui/src/pages/agent-detail-navigation.ts", + "ui/src/pages/agent-skills/AgentSkillsTab.tsx", + "ui/src/pages/apps/AppLogo.tsx", + "ui/storybook/fixtures/onboardingEnvironment.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/RuntimeTestCard.tsx", + "ui/storybook/prototypes/agent-settings/AgentSettingsPreview.tsx", + "ui/storybook/prototypes/agent-settings/fixtures.ts", + "ui/storybook/prototypes/new-agent-fixtures.ts", + "ui/storybook/prototypes/provider-routing/AgentSetup.tsx", + "ui/storybook/prototypes/provider-routing/ConnectionPicker.tsx", + "ui/storybook/prototypes/provider-routing/ConnectionSetup.tsx", + "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" + ], + "fingerprint": "c4867ec22b6b54a872d42fbe210ad0b671e64b920bdcf5e450d88091995c5965" + }, + { + "file": "ui/storybook/stories/provider-routing-02-connect.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Provider routing/02 Connect", + "status": "mixed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/AdapterLoginChrome.tsx", + "ui/src/components/ai-connections/AiProviderSetup.tsx", + "ui/src/features/connections/ConnectionChoiceList.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/src/pages/apps/AppLogo.tsx", + "ui/src/pages/apps/Browse.tsx", + "ui/src/pages/apps/app-definition-display.ts", + "ui/storybook/prototypes/provider-routing/ConnectionCatalog.tsx", + "ui/storybook/prototypes/provider-routing/ConnectionSetup.tsx", + "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" + ], + "fingerprint": "a6cd3df8023c60a14a54dfb399ae3d5c42c42300daa22f6fffd9f8f75d1dd14c" + }, + { + "file": "ui/storybook/stories/provider-routing-03-agent.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Provider routing/03 Agent", + "status": "mixed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/AdapterLoginChrome.tsx", + "ui/src/components/AdapterMark.tsx", + "ui/src/components/AgentActionButtons.tsx", + "ui/src/components/AgentConfigForm.tsx", + "ui/src/components/AgentContextualSidebar.tsx", + "ui/src/components/NewIssueDialog.tsx", + "ui/src/components/RuntimeTestCard.tsx", + "ui/src/components/agent-config-primitives.tsx", + "ui/src/components/ai-connections/AiConnectionManagement.tsx", + "ui/src/components/onboarding/CredentialModeLink.tsx", + "ui/src/components/onboarding/ModelSourceTiles.tsx", + "ui/src/components/onboarding/PillGuy.tsx", + "ui/src/features/connections/ConnectionChoiceList.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/src/pages/AgentDetail.tsx", + "ui/src/pages/AgentToolsTab.tsx", + "ui/src/pages/agent-detail-navigation.ts", + "ui/src/pages/agent-skills/AgentSkillsTab.tsx", + "ui/src/pages/apps/AppLogo.tsx", + "ui/storybook/fixtures/onboardingEnvironment.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/prototypes/RuntimeTestCard.tsx", + "ui/storybook/prototypes/agent-settings/AgentSettingsPreview.tsx", + "ui/storybook/prototypes/agent-settings/fixtures.ts", + "ui/storybook/prototypes/new-agent-fixtures.ts", + "ui/storybook/prototypes/provider-routing/AgentSetup.tsx", + "ui/storybook/prototypes/provider-routing/ConnectionPicker.tsx", + "ui/storybook/prototypes/provider-routing/ConnectionSetup.tsx", + "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" + ], + "fingerprint": "826b6dff2a44cbf04f433672b1a05daa6e479d3e4dddfbbe9f1b68b5a08ce90d" + }, + { + "file": "ui/storybook/stories/provider-routing-04-manage.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Provider routing/04 Manage", + "status": "mixed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/AdapterLoginChrome.tsx", + "ui/src/components/ai-connections/AiProviderSetup.tsx", + "ui/src/features/connections/ConnectionChoiceList.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "ui/src/pages/apps/AppLogo.tsx", + "ui/src/pages/apps/Browse.tsx", + "ui/src/pages/apps/app-definition-display.ts", + "ui/storybook/prototypes/provider-routing/ConnectionCatalog.tsx", + "ui/storybook/prototypes/provider-routing/ConnectionSetup.tsx", + "ui/storybook/prototypes/provider-routing/Management.tsx", + "ui/storybook/prototypes/provider-routing/RoutingAccess.tsx", + "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" + ], + "fingerprint": "2503a1f43bf4d887c466fca9b462ad21b603140dbaff0d3f940a4adcf37898f0" + }, + { + "file": "ui/storybook/stories/provider-routing-05-recovery.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Provider routing/05 Recovery", + "status": "mixed", + "implementation": "mixed", + "boundary": "fixtures", + "notes": "Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/AdapterLoginChrome.tsx", + "ui/src/features/connections/ConnectionIntentInteractionBody.tsx", + "ui/src/features/connections/ConnectionSetupFlow.tsx", + "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" + ], + "fingerprint": "d028cd3f82eae265db8b93a3ad523fa268929ee897ba6bf10fa5af13821ecb0d" + }, + { + "file": "ui/storybook/stories/provider-routing-06-production.stories.tsx", + "capabilities": [ + "runs-adapters/validation" + ], + "purpose": "AI Connections/Provider routing/06 Production components", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/AgentConfigForm.tsx", + "ui/src/components/agent-config-primitives.tsx", + "ui/src/components/ai-connections/AiConnectionField.tsx", + "ui/src/components/ai-connections/AiConnectionSelect.tsx", + "ui/src/components/ai-connections/AiProviderSetup.tsx", + "ui/src/components/ai-connections/useConnectionModels.ts", + "ui/src/components/new-agent/AgentProviderConnection.tsx", + "ui/src/pages/apps/Browse.tsx", + "ui/src/pages/apps/app-definition-display.ts", + "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" + ], + "fingerprint": "05984862e300309f20b828d08375ebe545c561b02f3bfbf0968fbbc2f18ae210" + }, + { + "file": "ui/storybook/stories/public-mcp-connections.stories.tsx", + "capabilities": [ + "gateways-profiles/client-connect" + ], + "purpose": "Assistant connections/Manage connections", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/gateways-profiles.md", + "ui/src/pages/McpConnect.tsx", + "ui/storybook/fixtures/publicMcp.ts", + "ui/storybook/stories/public-mcp-connections.stories.tsx" + ], + "fingerprint": "cb92bcca9caaf974d56d500a00abc79c80f84a88330a99f0afa804c2ee5a96e8" + }, + { + "file": "ui/storybook/stories/public-mcp-consent.stories.tsx", + "capabilities": [ + "gateways-profiles/client-connect" + ], + "purpose": "Assistant connections/Consent", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/gateways-profiles.md", + "ui/src/pages/McpConnect.tsx", + "ui/storybook/fixtures/publicMcp.ts", + "ui/storybook/stories/public-mcp-consent.stories.tsx" + ], + "fingerprint": "e1925d8873434a241d8b5acf605210a3b0c179c418cdbb4c96ba08bc208e17c7" + }, + { + "file": "ui/storybook/stories/public-mcp-device.stories.tsx", + "capabilities": [ + "gateways-profiles/client-connect" + ], + "purpose": "Assistant connections/Device authorization", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/gateways-profiles.md", + "ui/src/pages/McpConnect.tsx", + "ui/storybook/fixtures/publicMcp.ts", + "ui/storybook/stories/public-mcp-device.stories.tsx" + ], + "fingerprint": "726d36d9d9652a36cae43834ccb12f7bbe98cd0cb1f938c1ddfe5eada05f9a13" + }, + { + "file": "ui/storybook/stories/public-mcp-journey.stories.tsx", + "capabilities": [ + "gateways-profiles/client-connect" + ], + "purpose": "Assistant connections/Start here", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/gateways-profiles.md", + "ui/src/components/Layout.tsx", + "ui/src/pages/InstanceExperimentalSettings.tsx", + "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" + ], + "fingerprint": "c64f1aa2b77aeb83acece5e1a62f5ce890cf48434cbb07a6fdcfbe37cb5abc33" + }, + { + "file": "ui/storybook/stories/public-mcp-setting.stories.tsx", + "capabilities": [ + "gateways-profiles/client-connect" + ], + "purpose": "Assistant connections/Experimental setting", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/gateways-profiles.md", + "ui/src/pages/InstanceExperimentalSettings.tsx", + "ui/storybook/fixtures/publicMcp.ts", + "ui/storybook/stories/public-mcp-setting.stories.tsx" + ], + "fingerprint": "95d870bcd963c30a6ba79bcbb5b0e97db8406d21b044fae6a8e795638428b629" + }, + { + "file": "ui/storybook/stories/recovery-notice-preview.stories.tsx", + "capabilities": [ + "recovery/diagnosis", + "recovery/source-action" + ], + "purpose": "Design previews/Recovery notice", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/DispositionRecoveryNotice.tsx", + "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" + ], + "fingerprint": "844e5749b27fa106b07357e82223ca559d35281e6a4cff086e8d38db048eac95" + }, + { + "file": "ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx", + "capabilities": [ + "skills/versions", + "skills/discovery" + ], + "purpose": "Skills/Repository packages", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/components/Layout.tsx", + "ui/src/pages/CompanySkills.tsx", + "ui/src/pages/SkillSources.tsx", + "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" + ], + "fingerprint": "a1931c5b6ddcc74287861c3b0bc014ebc3d37614f96784da9008d63630e04e4e" + }, + { + "file": "ui/storybook/stories/rich-acp-interactions.stories.tsx", + "capabilities": [ + "questions-and-approvals/questions", + "questions-and-approvals/confirmations", + "questions-and-approvals/audience" + ], + "purpose": "Chat & Comments/Rich ACP interactions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/questions-and-approvals.md", + "ui/src/components/IssueThreadInteractionCard.tsx", + "ui/src/components/task-chat/TaskChatCompactInteractionCard.tsx", + "ui/src/components/task-chat/TaskChatProtocolActivityRow.tsx", + "ui/src/components/task-chat/TaskChatProtocolCard.tsx", + "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" + ], + "fingerprint": "e707ee55d955565de4be5b7bd33a1c84f0dda43ed7d8a0ad1af5704da409b116" + }, + { + "file": "ui/storybook/stories/rich-work-product-cards.stories.tsx", + "capabilities": [ + "documents-artifacts/work-products" + ], + "purpose": "Task Chat/Rich Work Product Cards", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "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" + ], + "fingerprint": "715cfced9ddfd845e74b8cb391faaacd223979f5e4dde95b4e7924302b3822eb" + }, + { + "file": "ui/storybook/stories/routine-detail-c.stories.tsx", + "capabilities": [ + "routines/definition", + "routines/management" + ], + "purpose": "Product/Routines \u00b7 Detail (variation C)", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/routines.md", + "ui/src/components/AgentActionButtons.tsx", + "ui/src/components/RoutineSaveBar.tsx", + "ui/src/components/RoutineSubSidebar.tsx", + "ui/src/components/routine-sections/context.tsx", + "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" + ], + "fingerprint": "803771d302dae639105261ccf7589ca7577f07aadaa060d6015804268a23922b" + }, + { + "file": "ui/storybook/stories/routine-secrets.stories.tsx", + "capabilities": [ + "routines/definition", + "secrets/runtime-delivery" + ], + "purpose": "Product/Routines \u00b7 Secrets tab", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/routines.md", + "maps/feature-map/secrets.md", + "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" + ], + "fingerprint": "03c9f2ff8c2f32316a5ab9e245b5aca89bff831523a8d40672f45fb919d108d7" + }, + { + "file": "ui/storybook/stories/routine-webhooks-ux.stories.tsx", + "capabilities": [ + "routines/triggers" + ], + "purpose": "Product/Routines/Webhooks UX preview", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/routines.md", + "ui/src/components/Layout.tsx", + "ui/src/components/routine-triggers/TriggerCard.tsx", + "ui/src/components/routine-triggers/TriggerWizard.tsx", + "ui/src/components/routine-triggers/WebhookFields.tsx", + "ui/src/pages/RoutineDetail.tsx", + "ui/src/pages/Routines.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/fixtures/routineTriggerCard.tsx", + "ui/storybook/fixtures/routineTriggerWizard.tsx", + "ui/storybook/fixtures/routineWebhookFields.tsx", + "ui/storybook/fixtures/routineWebhooks.tsx", + "ui/storybook/stories/routine-webhooks-ux.stories.tsx" + ], + "fingerprint": "79ae3dfb95aa9ec283df353b856a96e35f85a20360305853e3f566dc9e587a97" + }, + { + "file": "ui/storybook/stories/routine-webhooks.stories.tsx", + "capabilities": [ + "routines/triggers" + ], + "purpose": "Product/Routines/Webhooks", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/routines.md", + "ui/src/components/Layout.tsx", + "ui/src/pages/RoutineDetail.tsx", + "ui/src/pages/Routines.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/fixtures/routineWebhooks.tsx", + "ui/storybook/stories/routine-webhooks.stories.tsx" + ], + "fingerprint": "3e73dd1236c56f2033765874654ed86418612a91de8c4aa8aaedc71bb751dcfe" + }, + { + "file": "ui/storybook/stories/routines-list-groups.stories.tsx", + "capabilities": [ + "routines/definition", + "routines/management" + ], + "purpose": "Product/Routines \u00b7 List (grouped cards)", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/routines.md", + "ui/src/components/RoutineList.tsx", + "ui/storybook/stories/routines-list-groups.stories.tsx" + ], + "fingerprint": "50c3957e9dcc8fc61ab90352d9646f06108ae1da56ad37a3107f0ca5e782dfe3" + }, + { + "file": "ui/storybook/stories/runner-activity.stories.tsx", + "capabilities": [ + "tasks/discussion", + "runs-adapters/runs" + ], + "purpose": "Tasks/Runner activity preview", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "maps/feature-map/tasks.md", + "ui/src/components/task-chat/TaskChatLiveRunPill.tsx", + "ui/src/components/task-chat/TaskChatLiveTail.tsx", + "ui/src/components/task-chat/TaskChatRunnerTurn.tsx", + "ui/src/components/task-chat/TaskChatThreadView.tsx", + "ui/src/components/task-chat/expansion-state.tsx", + "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" + ], + "fingerprint": "c49b64d79396d3a04dc7ec15d241758fc90ba47785d330fd5024b65e367d2c90" + }, + { + "file": "ui/storybook/stories/scheduled-retry.stories.tsx", + "capabilities": [ + "recovery/bounded-continuation" + ], + "purpose": "Product/Issue Scheduled retry surfaces", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/IssueProperties.tsx", + "ui/src/components/IssueScheduledRetryCard.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/scheduled-retry.stories.tsx" + ], + "fingerprint": "ca1545d68d032468f9ad897d9942b59c1d8a60b29f2211a47d6e0c191b30279d" + }, + { + "file": "ui/storybook/stories/search.stories.tsx", + "capabilities": [ + "inbox-search/search" + ], + "purpose": "Product/Search & Command K", + "status": "unreviewed", + "implementation": "prototype", + "boundary": "fixtures", + "notes": "Local search-page composition mounts production result components; does not establish parity with the production Search route.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/inbox-search.md", + "ui/src/components/PageTabBar.tsx", + "ui/src/components/StatusBadge.tsx", + "ui/src/components/search/MatchSourceChip.tsx", + "ui/src/components/search/SearchFilterBar.tsx", + "ui/src/components/search/SearchFilterChips.tsx", + "ui/src/components/search/SearchResultRow.tsx", + "ui/src/components/search/ZeroResultsRecovery.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/search.stories.tsx" + ], + "fingerprint": "204fd804d9d5ff2235b0a770f2317e245e695c4bc9f069d8d09b4cb99d85b877" + }, + { + "file": "ui/storybook/stories/searchable-select.stories.tsx", + "capabilities": [ + "workspaces/binding" + ], + "purpose": "Components/SearchableSelect/Workspace picker", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/workspaces.md", + "ui/src/components/SearchableSelect.tsx", + "ui/storybook/stories/searchable-select.stories.tsx" + ], + "fingerprint": "08f37975b7be5affcdf2905dfa9b7d7a47cb18615591fb6167c563b07cb61533" + }, + { + "file": "ui/storybook/stories/secrets.stories.tsx", + "capabilities": [ + "secrets/company-secrets", + "secrets/vault-import" + ], + "purpose": "Product/Secrets", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/secrets.md", + "ui/src/components/SecretBindingPicker.tsx", + "ui/src/components/environment-variables-editor/index.tsx", + "ui/src/pages/Secrets.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/secrets.stories.tsx" + ], + "fingerprint": "30dcadb034495649535e501bdbd31c41327437f6f96c05937f544cdfb2dd0624" + }, + { + "file": "ui/storybook/stories/session-goals.stories.tsx", + "capabilities": [ + "runs-adapters/session" + ], + "purpose": "Composer/Session goals", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "ui/src/components/task-chat/RunnerGoalWidget.tsx", + "ui/storybook/stories/session-goals.stories.tsx" + ], + "fingerprint": "9bcfb237cf6c16bcb81ecdfbd31110f8709fb9b06d2c60bb3bfe58b2d2314ecc" + }, + { + "file": "ui/storybook/stories/skill-import-progress.stories.tsx", + "capabilities": [ + "skills/versions", + "skills/discovery" + ], + "purpose": "Skills/Import progress", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/pages/skills/SkillImportProgress.tsx", + "ui/storybook/fixtures/githubSkillSources.ts", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/skill-import-progress.stories.tsx" + ], + "fingerprint": "b4f466783a0864a6841a650483ffb00ec0999fac0eba6b3a3a38c2f87258b938" + }, + { + "file": "ui/storybook/stories/skill-policy-surfaces.stories.tsx", + "capabilities": [ + "skills/policy" + ], + "purpose": "Product/Skills/Policy surfaces", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/components/skill-studio/SkillPolicySurfaces.tsx", + "ui/storybook/stories/skill-policy-surfaces.stories.tsx" + ], + "fingerprint": "13ba7a87a34ca9aedddb9fe28132238b2064d9e6155a8e4ce7d587a641483f97" + }, + { + "file": "ui/storybook/stories/skills-store-detail.stories.tsx", + "capabilities": [ + "skills/discovery" + ], + "purpose": "Skills Store/Skill detail", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/pages/CompanySkills.tsx", + "ui/storybook/stories/skills-store-detail.stories.tsx" + ], + "fingerprint": "22f4467cce744d7eed66f0c441c549d289dc34c6723ff3c4dd4c7df31e22a262" + }, + { + "file": "ui/storybook/stories/skills-store-discovery.stories.tsx", + "capabilities": [ + "skills/discovery" + ], + "purpose": "Skills Store/Discovery grid", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/skills.md", + "ui/src/pages/CompanySkills.tsx", + "ui/storybook/stories/skills-store-discovery.stories.tsx" + ], + "fingerprint": "110b1e6168b39c7112d3317e7ef9db33048e77cf2c78331e3cb6f194567f182e" + }, + { + "file": "ui/storybook/stories/slack-automatic-setup.stories.tsx", + "capabilities": [ + "chat-channels/providers", + "connection-setup/channel-setup" + ], + "purpose": "Connections/Slack/Automatic setup", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "maps/feature-map/connection-setup.md", + "ui/src/components/chat/ChatSetupNavigation.tsx", + "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" + ], + "fingerprint": "51f957023492730e96a73d3322fceab232e522f4ef15c84e872d8924ddb72149" + }, + { + "file": "ui/storybook/stories/slack-avatar-settings.stories.tsx", + "capabilities": [ + "chat-channels/identity" + ], + "purpose": "Connections/Slack/Avatar in Settings", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "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" + ], + "fingerprint": "216835fbd5f463176e6e1eef64df3bfa6325f460004aa0ae0dc22518ef5de2a1" + }, + { + "file": "ui/storybook/stories/slack-communication-settings.stories.tsx", + "capabilities": [ + "chat-channels/identity" + ], + "purpose": "Connections/Slack/Communication in Settings", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "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" + ], + "fingerprint": "100ef834dc5074cc4682a04a329967db5844489b71b56fa410bd76dfa0541ff4" + }, + { + "file": "ui/storybook/stories/slack-managed-setup.stories.tsx", + "capabilities": [ + "chat-channels/providers", + "connection-setup/channel-setup" + ], + "purpose": "Connections/Slack/Managed setup", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "maps/feature-map/connection-setup.md", + "ui/src/components/chat/ChatSetupNavigation.tsx", + "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" + ], + "fingerprint": "010592e2358a425353471763246fa801034c65b83cf01c4eed1e4a82e4ea6ed6" + }, + { + "file": "ui/storybook/stories/slack-tools.stories.tsx", + "capabilities": [ + "chat-channels/conversation" + ], + "purpose": "Connections/Slack/Task tools", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/chat-channels.md", + "ui/src/pages/apps/chat/SlackToolSettings.tsx", + "ui/storybook/stories/slack-tools.stories.tsx" + ], + "fingerprint": "9348c9d89befbf34e9eb905b290f7b73b192337cd498ddc028e4ddfe44e7d8bd" + }, + { + "file": "ui/storybook/stories/source-issue-recovery.stories.tsx", + "capabilities": [ + "recovery/diagnosis", + "recovery/source-action" + ], + "purpose": "Paperclip/Source Issue Recovery", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/IssueBlockedNotice.tsx", + "ui/src/components/IssueRecoveryActionCard.tsx", + "ui/src/components/IssueRow.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/source-issue-recovery.stories.tsx" + ], + "fingerprint": "c7457183c25c8802e6b6b47f1ec8575ed277f834b09aa1ebc5735fe61776f5cd" + }, + { + "file": "ui/storybook/stories/source-resolved-fold.stories.tsx", + "capabilities": [ + "recovery/diagnosis", + "recovery/source-action" + ], + "purpose": "Paperclip/Source-resolved Fold", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/SourceResolvedFoldBadge.tsx", + "ui/src/components/SourceResolvedFoldCallout.tsx", + "ui/storybook/stories/source-resolved-fold.stories.tsx" + ], + "fingerprint": "8afd150fe253fae2d9094c6678449693b28e63249f5a852feabd43bed87a1b25" + }, + { + "file": "ui/storybook/stories/status-language.stories.tsx", + "capabilities": [], + "purpose": "Foundations/Status Language", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "ui/src/components/CopyText.tsx", + "ui/src/components/EmptyState.tsx", + "ui/src/components/Identity.tsx", + "ui/src/components/IssueBlockedNotice.tsx", + "ui/src/components/IssueRow.tsx", + "ui/src/components/MetricCard.tsx", + "ui/src/components/PriorityIcon.tsx", + "ui/src/components/QuotaBar.tsx", + "ui/src/components/StatusBadge.tsx", + "ui/src/components/StatusIcon.tsx", + "ui/src/components/ui/card.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/status-language.stories.tsx" + ], + "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", + "fingerprint": "8514f6eaa6b793e7737f4aef33dd2a1bf1fe47bf7cf106f7fd56be1c1466be26" + }, + { + "file": "ui/storybook/stories/sub-issues-workflow.stories.tsx", + "capabilities": [ + "task-coordination/dependencies", + "task-coordination/delegation" + ], + "purpose": "UX Labs/Sub-issues Workflow Checklist", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/task-coordination.md", + "ui/src/components/IssuesList.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/sub-issues-workflow.stories.tsx" + ], + "fingerprint": "aab65b7c2d7d976b9f8ceb99d60c1b16d6e6eb97e8443afa48fa3e92561feec3" + }, + { + "file": "ui/storybook/stories/successful-run-handoff.stories.tsx", + "capabilities": [ + "tasks/completion", + "recovery/diagnosis" + ], + "purpose": "Paperclip/Successful Run Handoff", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "maps/feature-map/tasks.md", + "ui/src/components/Identity.tsx", + "ui/src/components/IssueBlockedNotice.tsx", + "ui/src/components/IssueChatThread.tsx", + "ui/src/components/KanbanBoard.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/successful-run-handoff.stories.tsx" + ], + "fingerprint": "453ca62993784ebcff825853ee3ac3207d6ea0ff0db960a9f6fd9da418bb50e4" + }, + { + "file": "ui/storybook/stories/summary-slot-card.stories.tsx", + "capabilities": [ + "agents/built-in" + ], + "purpose": "Summaries/SummarySlotCard", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/agents.md", + "ui/src/components/SummarySlotCard.tsx", + "ui/storybook/stories/summary-slot-card.stories.tsx" + ], + "fingerprint": "8504293cf126375d22ffe6a6fd80c5f1736b5fb03bb01618e5c65c5d9a32bb31" + }, + { + "file": "ui/storybook/stories/task-artifact-gallery.stories.tsx", + "capabilities": [ + "documents-artifacts/library", + "documents-artifacts/work-products" + ], + "purpose": "Tasks/Artifact Gallery", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/documents-artifacts.md", + "ui/src/components/ImageGalleryModal.tsx", + "ui/src/components/issue-properties/IssuePropertiesArtifactsTab.tsx", + "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" + ], + "fingerprint": "80254d3e29fbbb687300a8fee5900dbb9b6a8b68ce22d95a4a9ae78fe956dc16" + }, + { + "file": "ui/storybook/stories/task-chat-chain-of-thought.stories.tsx", + "capabilities": [ + "tasks/discussion", + "runs-adapters/runs" + ], + "purpose": "Tasks/Task chat review fixes", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/runs-adapters.md", + "maps/feature-map/tasks.md", + "ui/src/components/task-chat/TaskChatBubble.tsx", + "ui/src/components/task-chat/TaskChatRunnerTurn.tsx", + "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" + ], + "fingerprint": "74ed9bd9d86ccc043226551cf9896ecd7ba85bec03019fcf03facf4d20a360b6" + }, + { + "file": "ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx", + "capabilities": [ + "questions-and-approvals/questions", + "questions-and-approvals/confirmations", + "questions-and-approvals/audience" + ], + "purpose": "Composer/Interaction above composer", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "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.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/questions-and-approvals.md", + "ui/src/components/MobileBottomNav.tsx", + "ui/src/components/task-chat/TaskChatComposer.tsx", + "ui/src/components/task-chat/TaskChatComposerDock.tsx", + "ui/src/components/task-chat/TaskChatInteractionCard.tsx", + "ui/src/components/task-chat/TaskChatProtocolCard.tsx", + "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" + ], + "fingerprint": "917b21b457c6c173cfcfc5a6e1d6ec54bbbee92a4d04bc2be5a6c4928984681c" + }, + { + "file": "ui/storybook/stories/task-chat-mobile-follow.stories.tsx", + "capabilities": [ + "tasks/discussion" + ], + "purpose": "Task chat/Mobile streaming follow", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "ui/src/components/MobileBottomNav.tsx", + "ui/src/components/task-chat/TaskChatComposer.tsx", + "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" + ], + "fingerprint": "3ccff6b7e818d1691c0287229b7f5ef18aa2668332fcd873cc6f188d49d69e73" + }, + { + "file": "ui/storybook/stories/task-chat-system-notice.stories.tsx", + "capabilities": [ + "tasks/discussion" + ], + "purpose": "Product/Task chat/System notice", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "1cd42408b2c31320e2dec854dd0dec86ae6fe9328b5c9bf0bc7d82c7acdffd35" + }, + { + "file": "ui/storybook/stories/task-chat-unanswered-questions.stories.tsx", + "capabilities": [ + "questions-and-approvals/dismiss-and-reopen", + "tasks/discussion" + ], + "purpose": "Chat & Comments/Task Chat Unanswered Questions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/questions-and-approvals.md", + "maps/feature-map/tasks.md", + "ui/src/components/TaskChatThread.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/fixtures/unansweredQuestionChat.tsx", + "ui/storybook/stories/task-chat-unanswered-questions.stories.tsx" + ], + "fingerprint": "402f78a40546ce9b4a4b9fc28f995ec18e9c27702e6ba8df609a8f4d5f001fee" + }, + { + "file": "ui/storybook/stories/task-context-notices.stories.tsx", + "capabilities": [ + "tasks/discussion" + ], + "purpose": "Tasks/Context notices", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "ui/src/components/EmailMessageCard.tsx", + "ui/src/components/ExecutionBlockerNotice.tsx", + "ui/src/components/chat/ExternallyConnectedTaskBanner.tsx", + "ui/storybook/stories/task-context-notices.stories.tsx" + ], + "fingerprint": "550059ae3c321e98ae8273caf7ff8d33d4702703e7bfaa3e13aa7a33b8e0efc2" + }, + { + "file": "ui/storybook/stories/task-execution-controls.stories.tsx", + "capabilities": [ + "steering/stop-and-pause" + ], + "purpose": "Composer/Execution controls", + "status": "current", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/steering.md", + "ui/src/components/TaskTreeControls.tsx", + "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" + ], + "fingerprint": "2ab3cccc76d0a055efbd97501e257088470150423473d77651057229bf5a612a" + }, + { + "file": "ui/storybook/stories/task-text-files.stories.tsx", + "capabilities": [ + "documents-artifacts/attachments" + ], + "purpose": "Tasks/Text file tabs", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "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" + ], + "fingerprint": "88992903362472d8587168537357335425e6239270bafe02e05d108c72b1a69b" + }, + { + "file": "ui/storybook/stories/task-watchdog-surfaces.stories.tsx", + "capabilities": [ + "task-coordination/tree-control" + ], + "purpose": "Product/Task Watchdog surfaces", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/task-coordination.md", + "ui/src/components/IssueProperties.tsx", + "ui/storybook/fixtures/paperclipData.ts", + "ui/storybook/stories/task-watchdog-surfaces.stories.tsx" + ], + "fingerprint": "43b0522a20b83ff2fc4833e7d62249098564f42f64bbfcc0c26537d93a650d3e" + }, + { + "file": "ui/storybook/stories/team-catalog.stories.tsx", + "capabilities": [ + "teams/preview", + "teams/discovery" + ], + "purpose": "Surfaces/Team Catalog", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Renders shipped TeamCatalog source, but feature map documents current CLI/API access and no top-level catalog route.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/teams.md", + "ui/src/pages/TeamCatalog.fixtures.ts", + "ui/src/pages/TeamCatalog.tsx", + "ui/storybook/stories/team-catalog.stories.tsx" + ], + "fingerprint": "d6ff514c0048eb1cb47965cb2e7af54d3483f5921bf0957fee96612d34f51e1d" + }, + { + "file": "ui/storybook/stories/thread-human-identity/00-evidence.stories.tsx", + "capabilities": [ + "tasks/discussion" + ], + "purpose": "Chat & Comments/Human identity/00 Review guide", + "status": "unreviewed", + "implementation": "guide", + "boundary": "static", + "notes": "Review guide retained; explanatory content does not establish runtime or production coverage.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "f2f790b481362ed01fbffea8688613804b416f9bc488301adf59993bba4d8f72" + }, + { + "file": "ui/storybook/stories/thread-human-identity/01-components.stories.tsx", + "capabilities": [ + "tasks/discussion" + ], + "purpose": "Chat & Comments/Human identity/01 Components", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "ui/src/components/task-chat/TaskChatBubble.tsx", + "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" + ], + "fingerprint": "7d18f314cbbcaacca17b800d8a64e4ab2c42f5b723aefcf03b0e21cbf41d9476" + }, + { + "file": "ui/storybook/stories/thread-human-identity/02-task-journey.stories.tsx", + "capabilities": [ + "tasks/discussion" + ], + "purpose": "Chat & Comments/Human identity/02 Mixed-author journey", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/tasks.md", + "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" + ], + "fingerprint": "6af2fa024cc2a7ef17d355bab43fc4f10132ff596b71d93ae0327aaadc0323cd" + }, + { + "file": "ui/storybook/stories/user-secrets.stories.tsx", + "capabilities": [ + "secrets/user-secrets" + ], + "purpose": "Product/User secrets", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/secrets.md", + "ui/src/components/environment-variables-editor/index.tsx", + "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" + ], + "fingerprint": "52de3176504986226f5a3e1d8e0fb1a3b0caafdd71da6656d9bdcfa4bd87ef52" + }, + { + "file": "ui/storybook/stories/ux-labs.stories.tsx", + "capabilities": [ + "developer-labs/interaction-labs" + ], + "purpose": "UX Labs/Converted Test Pages", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/developer-labs.md", + "ui/src/pages/InviteUxLab.tsx", + "ui/src/pages/IssueChatUxLab.tsx", + "ui/src/pages/RunTranscriptUxLab.tsx", + "ui/src/pages/SystemNoticeUxLab.tsx", + "ui/storybook/stories/ux-labs.stories.tsx" + ], + "fingerprint": "3570ef2e7b2b4c84e47614b2a907c67d97128a1a7f8f2307527da66c7a0443bf" + }, + { + "file": "ui/storybook/stories/what-needs-me.stories.tsx", + "capabilities": [ + "inbox-search/decisions" + ], + "purpose": "Pages/Decisions", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/inbox-search.md", + "ui/src/components/AttentionQueueRow.tsx", + "ui/src/components/IssueGroupHeader.tsx", + "ui/src/components/ToastViewport.tsx", + "ui/storybook/stories/what-needs-me.stories.tsx" + ], + "fingerprint": "2ddefa4378c04219b88c9b9f33973aa3c892ec173cdac764588521001940dce0" + }, + { + "file": "ui/storybook/stories/work-timeline.stories.tsx", + "capabilities": [ + "activity/timeline" + ], + "purpose": "Pages/Work Timeline", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/activity.md", + "ui/src/components/timeline/WorkTimelineChart.tsx", + "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" + ], + "fingerprint": "39930f80f4b2758c9887093bc34094f07e07e058ec77707e7dc7dafdbcae8826" + }, + { + "file": "ui/storybook/stories/workspace-branch-recovery/01-component.stories.tsx", + "capabilities": [ + "recovery/workspace" + ], + "purpose": "Workspace branch recovery/01 Repair card", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "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" + ], + "fingerprint": "23eb031735a6d86350ab65cf7136f83ec156527e701bc731cef2543b59cfea82" + }, + { + "file": "ui/storybook/stories/workspace-branch-recovery/02-task-journey.stories.tsx", + "capabilities": [ + "recovery/workspace" + ], + "purpose": "Workspace branch recovery/02 Task journey", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/recovery.md", + "ui/src/components/Layout.tsx", + "ui/src/components/StatusBadge.tsx", + "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" + ], + "fingerprint": "5f196b568769b5a1ae4be18b710c7c8d330ded45d15fa62109d6a6daf2c6dec5" + }, + { + "file": "ui/storybook/stories/workspace-file-browser.stories.tsx", + "capabilities": [ + "workspaces/files-git" + ], + "purpose": "Issue/Workspace File Browser", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/workspaces.md", + "ui/src/components/FileViewerSheet.tsx", + "ui/src/components/IssueWorkspaceCard.tsx", + "ui/storybook/stories/workspace-file-browser.stories.tsx" + ], + "fingerprint": "dd09003a9523f2c234445d60827125ec9b5c3df732ec54631d86a5be91447fc8" + }, + { + "file": "ui/storybook/stories/workspace-runtime-provisioning.stories.tsx", + "capabilities": [ + "workspaces/provisioning" + ], + "purpose": "Workspaces/Runtime provisioning status", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/workspaces.md", + "ui/src/pages/ExecutionWorkspaceDetail.tsx", + "ui/storybook/stories/workspace-runtime-provisioning.stories.tsx" + ], + "fingerprint": "b91646a603aefc363fc3e2e2e5ab54f785825ba66f5b86d5a0c75e135efb16a1" + }, + { + "file": "ui/storybook/stories/workspace-service-control-bar.stories.tsx", + "capabilities": [ + "workspaces/services" + ], + "purpose": "Workspaces/Service control bar", + "status": "unreviewed", + "implementation": "production", + "boundary": "fixtures", + "notes": "Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed.", + "reviewedAt": "2026-10-12", + "sources": [ + "maps/feature-map/workspaces.md", + "ui/src/components/WorkspaceServiceControlBar.tsx", + "ui/storybook/stories/workspace-service-control-bar.stories.tsx" + ], + "fingerprint": "4c18f2b9ac0ba5512478f554054a5be973b68211f15caff8875d2abb4ea7fdab" + } + ] +} diff --git a/scripts/storybook-catalog.mjs b/scripts/storybook-catalog.mjs new file mode 100644 index 00000000000..e1f1f4a2798 --- /dev/null +++ b/scripts/storybook-catalog.mjs @@ -0,0 +1,134 @@ +#!/usr/bin/env node +import { createHash } from "node:crypto"; +import { existsSync, readFileSync, readdirSync, writeFileSync } from "node:fs"; +import { createRequire } from "node:module"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const scriptPath = fileURLToPath(import.meta.url); +const defaultRoot = path.resolve(path.dirname(scriptPath), ".."); +const storyRoot = "ui/storybook/stories"; +const catalogPath = "maps/storybook-map/catalog.json"; +const indexPath = "maps/storybook-map/INDEX.md"; +const statuses = ["current", "proposed", "historical", "mixed", "unreviewed"]; +const implementations = ["production", "prototype", "mixed", "guide"]; +const boundaries = ["fixtures", "fixture-server", "static"]; + +function files(root, dir) { + return readdirSync(path.join(root, dir), { withFileTypes: true }).flatMap(entry => { + const name = `${dir}/${entry.name}`; + return entry.isDirectory() ? files(root, name) : [name]; + }).sort(); +} + +export function fingerprint(root, sources) { + const hash = createHash("sha256"); + for (const file of [...new Set(sources)].sort()) { + hash.update(file).update("\0").update(readFileSync(path.join(root, file))).update("\0"); + } + return hash.digest("hex"); +} + +export function capabilities(root) { + const result = new Map(); + for (const file of files(root, "maps/feature-map").filter(file => file.endsWith(".md") && !file.endsWith("README.md"))) { + const text = readFileSync(path.join(root, file), "utf8"); + const area = path.basename(file, ".md"); + const section = text.split(/^## Sub-features\s*$/m)[1]?.split(/^## /m)[0] ?? ""; + for (const match of section.matchAll(/^- `([^`]+)`:/gm)) result.set(`${area}/${match[1]}`, file); + } + return result; +} + +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 }; + }); +} + +export function validateCatalog(root, catalog, stories) { + const errors = []; + const refs = capabilities(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)); + if (catalog.version !== 1 || !Array.isArray(catalog.entries)) return ["Unsupported catalog version or missing entries"]; + function review(label, sources, hash) { + if (!Array.isArray(sources) || !sources.length || sources.some(file => !local(file))) { + errors.push(`${label}: missing/invalid review sources`); + } else if (fingerprint(root, sources) !== hash) errors.push(`${label}: source changed; review before updating its fingerprint`); + } + review("Shared Storybook setup", catalog.sharedReview?.sources, catalog.sharedReview?.fingerprint); + for (const entry of catalog.entries) { + const label = entry.file; + if (seen.has(label)) errors.push(`${label}: duplicate catalog entry`); + seen.add(label); + if (!byFile.has(label)) errors.push(`${label}: missing story file`); + if (!statuses.includes(entry.status)) errors.push(`${label}: invalid product status`); + if (!implementations.includes(entry.implementation)) errors.push(`${label}: invalid implementation`); + if (!boundaries.includes(entry.boundary)) errors.push(`${label}: invalid data boundary`); + if (!entry.purpose?.trim() || !entry.notes?.trim()) errors.push(`${label}: purpose and review notes are required`); + if (!/^\d{4}-\d{2}-\d{2}$/.test(entry.reviewedAt ?? "")) errors.push(`${label}: missing review date`); + if (!Array.isArray(entry.capabilities)) { errors.push(`${label}: missing capabilities`); continue; } + 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`); + 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); + } + for (const story of stories) if (!seen.has(story.file)) errors.push(`${story.file}: story missing from catalog`); + const ids = stories.flatMap(story => story.ids); + if (ids.length !== new Set(ids).size) errors.push("Duplicate story IDs"); + return errors; +} + +function cell(value) { return String(value).replaceAll("|", "\\|").replaceAll("\n", " "); } + +export function renderIndex(catalog, stories, refs) { + const byFile = new Map(stories.map(story => [story.file, story])); + const groups = new Map(); + for (const entry of catalog.entries) { + const area = entry.capabilities[0]?.split("/")[0] ?? "foundations-and-guides"; + if (!groups.has(area)) groups.set(area, []); + groups.get(area).push(entry); + } + const lines = ["# Storybook by feature", "", "", "", + "[Contract and maintenance](README.md) · [Review findings](REVIEW.md)", "", + `${stories.length} story files; ${stories.reduce((n, story) => n + story.ids.length, 0)} indexed stories. Counts describe inventory, not passed tests or complete feature coverage.`, "", + "Status describes product alignment; implementation describes the rendered subject; boundary describes simulated data. Sources and limitations are in catalog.json. Related capabilities cross-list one canonical story file.", ""]; + for (const [area, entries] of [...groups].sort(([a], [b]) => a.localeCompare(b))) { + lines.push(`## ${area}`, "", ...(area !== "foundations-and-guides" ? [`[Feature recipe](../feature-map/${area}.md)`, ""] : []), + "| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note |", + "| --- | --- | --- | --- | --- |"); + for (const entry of entries.sort((a, b) => a.file.localeCompare(b.file))) { + const story = byFile.get(entry.file); + lines.push(`| [${cell(story.title)}](../../${entry.file}) | ${entry.capabilities.map(ref => `\`${ref}\``).join(", ") || cell(entry.exception)} | ${entry.status} / ${entry.implementation} / ${entry.boundary} | ${story.ids.length} / ${story.plays} | ${cell(entry.notes)} |`); + } + lines.push(""); + } + lines.push("## 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.", ""); + for (const ref of refs.keys()) { + const entries = catalog.entries.filter(entry => entry.capabilities.includes(ref)); + lines.push(`- \`${ref}\`: ${entries.length ? entries.map(entry => `[${cell(byFile.get(entry.file).title)}](../../${entry.file}) (${entry.status})`).join(", ") : "No cataloged story."}`); + } + return lines.join("\n") + "\n"; +} + +if (process.argv[1] && path.resolve(process.argv[1]) === scriptPath) { + const args = process.argv.slice(2); + if (args.some(arg => arg !== "--write")) throw new Error("Usage: node scripts/storybook-catalog.mjs [--write]"); + const catalog = JSON.parse(readFileSync(path.join(defaultRoot, catalogPath), "utf8")); + const stories = scanStories(); + const errors = validateCatalog(defaultRoot, catalog, stories); + if (!errors.length) { + const generated = renderIndex(catalog, stories, capabilities(defaultRoot)); + if (args.includes("--write")) writeFileSync(path.join(defaultRoot, indexPath), generated); + else if (!existsSync(path.join(defaultRoot, indexPath)) || readFileSync(path.join(defaultRoot, indexPath), "utf8") !== generated) errors.push("Generated INDEX.md is stale; run with --write after reviewing catalog changes"); + } + if (errors.length) { errors.forEach(error => console.error(error)); process.exitCode = 1; } + else console.log(`Storybook catalog aligned: ${stories.length} files, ${stories.reduce((n, story) => n + story.ids.length, 0)} stories. Structure and review fingerprints only; no runtime proof.`); +} diff --git a/scripts/storybook-catalog.test.mjs b/scripts/storybook-catalog.test.mjs new file mode 100644 index 00000000000..c82059060a6 --- /dev/null +++ b/scripts/storybook-catalog.test.mjs @@ -0,0 +1,114 @@ +import assert from "node:assert/strict"; +import { mkdtempSync, mkdirSync, writeFileSync, rmSync, symlinkSync } from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { test } from "node:test"; +import { fileURLToPath } from "node:url"; +import { capabilities, fingerprint, renderIndex, scanStories, validateCatalog } from "./storybook-catalog.mjs"; + +function fixture(t) { + const root = mkdtempSync(path.join(os.tmpdir(), "storybook-catalog-")); + t.after(() => rmSync(root, { recursive: true, force: true })); + function write(file, text) { + mkdirSync(path.dirname(path.join(root, file)), { recursive: true }); + writeFileSync(path.join(root, file), text); + } + 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"; + 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", + 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 }]; + return { root, write, file, catalog, stories }; +} + +test("complete inventory accepts production subjects with simulated data", t => { + const f = fixture(t); + assert.deepEqual(validateCatalog(f.root, f.catalog, f.stories), []); +}); + +test("adding, removing or duplicating story files requires reconciliation", t => { + const f = fixture(t); + assert.match(validateCatalog(f.root, { ...f.catalog, entries: [] }, f.stories).join("\n"), /missing from catalog/); + assert.match(validateCatalog(f.root, f.catalog, []).join("\n"), /missing story file/); + f.catalog.entries.push(f.catalog.entries[0]); + assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /duplicate catalog entry/); +}); + +test("capability renames and unjustified unmapped stories fail", t => { + const f = fixture(t); + f.catalog.entries[0].capabilities = ["tasks/old-name"]; + assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /unknown feature capability/); + 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"; + assert.deepEqual(validateCatalog(f.root, f.catalog, f.stories), []); +}); + +test("production and shared fixture drift invalidate review fingerprints", t => { + const f = fixture(t); + f.write("ui/src/Task.tsx", "// changed contract\n"); + f.write("ui/storybook/.storybook/preview.tsx", "// changed shared mocks\n"); + const errors = validateCatalog(f.root, f.catalog, f.stories); + assert.equal(errors.filter(error => error.includes("source changed")).length, 2); + assert.equal(f.catalog.entries[0].fingerprint.length, 64); +}); + +test("missing and escaping source references cannot certify a review", t => { + const f = fixture(t); + f.catalog.entries[0].sources.push("../outside.ts"); + assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /invalid review sources/); +}); + +test("cross-capability lookup retains one canonical file and honest status", t => { + const f = fixture(t); + f.catalog.entries[0].status = "historical"; + const index = renderIndex(f.catalog, f.stories, capabilities(f.root)); + assert.match(index, /tasks\/create.*\(historical\)/); + assert.match(index, /tasks\/discussion.*\(historical\)/); + assert.match(index, /1 story files; 1 indexed stories/); + assert.match(index, /historical \/ production \/ fixtures/); +}); + +test("duplicate story IDs cannot silently collapse distinct examples", t => { + const f = fixture(t); + f.stories[0].ids.push(f.stories[0].ids[0]); + assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /Duplicate story IDs/); +}); + +test("Storybook parser discovers nested files, filters helpers, preserves explicit IDs and counts play functions", t => { + const f = fixture(t); + f.write("ui/package.json", '{"type":"module"}'); + symlinkSync(fileURLToPath(new URL("../ui/node_modules", import.meta.url)), path.join(f.root, "ui/node_modules"), "junction"); + f.write(f.file, ` + import type { Meta, StoryObj } from "@storybook/react-vite"; + const meta = { title: "Tasks/Create", id: "stable-task", excludeStories: ["empty"] } satisfies Meta; + export default meta; + type Story = StoryObj; + export const empty = { value: "fixture" }; + export const Empty: Story = {}; + export const Filled: Story = { play: async () => {} }; + `); + f.write("ui/storybook/stories/nested/other.stories.ts", ` + export default { title: "Other/Subject", includeStories: ["Included"] }; + export const helper = {}; + export const Included = {}; + `); + f.write("ui/storybook/stories/nested/fixture.ts", "export const fixture = {};"); + 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, + }); + 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, + }); +}); diff --git a/ui/storybook/prototypes/README.md b/ui/storybook/prototypes/README.md index c187b519da3..5f6666cd497 100644 --- a/ui/storybook/prototypes/README.md +++ b/ui/storybook/prototypes/README.md @@ -9,7 +9,7 @@ pnpm --filter @paperclipai/ui exec storybook dev --port 6010 --host 127.0.0.1 -- ## Connector catalog chips **Apps → Catalog source selection → Chips** is the focused catalog preview. -The four text chips are **Paperclip**, **Composio**, **Installed**, and **All**. +The five text chips are **Paperclip**, **Composio**, **Arcade**, **Installed**, and **All**. The selected chip has a neutral pill background; the other choices are plain text. Connected accounts stay above discovery. Installed shows only saved native and Composio apps. All includes every catalog source, including Arcade. Searching diff --git a/ui/storybook/stories/agent-chat.stories.tsx b/ui/storybook/stories/agent-chat.stories.tsx index 35d34c87cfe..592dde03355 100644 --- a/ui/storybook/stories/agent-chat.stories.tsx +++ b/ui/storybook/stories/agent-chat.stories.tsx @@ -9,7 +9,7 @@ const meta = { docs: { description: { component: - "Uses the actual production Layout (Sidebar, BreadcrumbBar, PropertiesPanel), TaskChatThread (TaskChatComposer, harness activity, thinking/tool disclosures, responses), and TaskSidePanel (plans, artifacts, subtasks). Agent shortcuts compose the existing sidebar rows and sections: starred agents first, the first-created agent as a default, then recent conversations. The compose button opens a searchable picker for every agent, and the gear link opens agent configuration. The task surfaces differ only in breadcrumb/title and initially open panel tabs. All data is fixture data; sends append locally and unsupported mutations fail explicitly.", + "Production Layout, AgentChat, IssueDetail, transcript and side-panel components run against in-memory routes. The landing page is a local ChatEntryLanding composition; first-use/default-agent behavior is not production acceptance. Sends append locally. Some unhandled API paths return empty fixture data, so this suite does not verify API contracts or primary-agent preference behavior.", }, }, }, diff --git a/ui/storybook/stories/chat-entry.stories.tsx b/ui/storybook/stories/chat-entry.stories.tsx index a04145fb648..539d5721fe0 100644 --- a/ui/storybook/stories/chat-entry.stories.tsx +++ b/ui/storybook/stories/chat-entry.stories.tsx @@ -6,7 +6,7 @@ const meta = { title: "Design explorations/Chat entry", component: AgentChatPrototype, parameters: { layout: "fullscreen", docs: { description: { component: - "Review-only proposal: Chats contains starred and recent conversations, with the first-created agent always present as a default entry. First use uses the same compact rows as returning chats. The aligned compose icon appears on hover or keyboard focus (and stays visible on touch). The picker shows search and agent results with roles and paused status. The sidebar, picker, layout, transcript, and composer are production components. Only the first-use landing page and data are Storybook fixtures. Selecting and sending use in-memory fixtures; no real agents run." + "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." } } }, args: { entryScenario: "returning", scenario: "returning", contextInitiallyOpen: false }, render: (args) => , diff --git a/ui/storybook/stories/fast-responses/01-settings.stories.tsx b/ui/storybook/stories/fast-responses/01-settings.stories.tsx index 73b61216653..4ed8d04936f 100644 --- a/ui/storybook/stories/fast-responses/01-settings.stories.tsx +++ b/ui/storybook/stories/fast-responses/01-settings.stories.tsx @@ -37,6 +37,7 @@ export const result: FastResponseTestResult = { }; const meta = { title: "Fast responses/01 Settings", + excludeStories: ["empty", "configured", "result"], component: FastResponseSettingsView, decorators: [ (Story) => ( @@ -52,6 +53,7 @@ const meta = { onSave: fn(), onTest: fn(), onAdd: fn(), + onConnectionChange: fn(), }, } satisfies Meta; export default meta; diff --git a/ui/storybook/stories/overview.stories.tsx b/ui/storybook/stories/overview.stories.tsx index c95b2126a69..c7e1ab8f647 100644 --- a/ui/storybook/stories/overview.stories.tsx +++ b/ui/storybook/stories/overview.stories.tsx @@ -1,203 +1,92 @@ +import { useEffect, useMemo, useState } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { - BookOpen, - Bot, - CheckCircle2, - FlaskConical, - FolderKanban, - FormInput, - Layers3, - LayoutDashboard, - ListTodo, - MessageSquare, - PanelLeft, - Route, - ShieldCheck, - Wallet, -} from "lucide-react"; import { Badge } from "@/components/ui/badge"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import catalog from "../../../maps/storybook-map/catalog.json"; -const storyGroups = [ - { - title: "Foundations", - icon: Layers3, - stories: "Buttons, badges, form controls, tabs, cards, dialogs, overlays", - why: "Baseline tokens and primitives before product components add state.", - }, - { - title: "Control Plane Surfaces", - icon: ShieldCheck, - stories: "Issue rows, approvals, budget cards, activity rows, metrics", - why: "The V1 board UI depends on these dense operational patterns staying legible.", - }, - { - title: "UX Labs", - icon: FlaskConical, - stories: "Issue chat, run transcripts, invite/access flows", - why: "The old `/tests/ux/*` pages are fixture-backed Storybook stories now.", - }, - { - title: "Navigation & Layout", - icon: PanelLeft, - stories: "Sidebar, breadcrumbs, command palette, company rail, mobile nav", - why: "Navigation chrome frames every board interaction and needs mobile parity.", - }, - { - title: "Agent Management", - icon: Bot, - stories: "Agent properties, config forms, icon picker, action buttons", - why: "Agent lifecycle is the primary governance surface for operators.", - }, - { - title: "Issue Management", - icon: ListTodo, - stories: "Issue lists, filters, properties, documents, run ledger, workspace cards", - why: "Issues are the core work unit — every view state matters for scan speed.", - }, - { - title: "Forms & Editors", - icon: FormInput, - stories: "Markdown editor, JSON schema forms, env vars, schedule editor, pickers", - why: "Rich editors need isolated review for empty, filled, and validation states.", - }, - { - title: "Budget & Finance", - icon: Wallet, - stories: "Incident cards, provider quotas, biller spend, subscription panels", - why: "Financial controls are safety-critical and need threshold state coverage.", - }, - { - title: "Dialogs & Modals", - icon: LayoutDashboard, - stories: "New issue/agent/goal/project dialogs, diff modal, image gallery", - why: "Dialogs interrupt flow — they must be scannable and self-explanatory.", - }, - { - title: "Projects & Goals", - icon: FolderKanban, - stories: "Project properties, workspace cards, goal trees, runtime controls", - why: "Hierarchical views (goals, projects, workspaces) need expand/collapse coverage.", - }, - { - title: "Chat & Comments", - icon: MessageSquare, - stories: "Comment threads, run chat, issue chat with timeline events", - why: "Threaded conversations mix agent/user/system authors and need density review.", - }, -]; - -const coverageRows = [ - ["System primitives", "Covered", "State matrix across size, variant, disabled, icon, and overlay behavior"], - ["Status language", "Covered", "Issue/agent lifecycle badges, priorities, quota thresholds, and empty states"], - ["Task surfaces", "Covered", "Inbox-style rows with unread, selected, archive, and trailing metadata states"], - ["Governance", "Covered", "Pending, revision-requested, approved, and budget-specific approval payloads"], - ["Budget controls", "Covered", "Healthy, warning, hard-stop, compact, plain, and editable card variants"], - ["Execution UX", "Covered", "Run transcript detail, live widget, dashboard card, streaming and settled views"], - ["Invite UX", "Covered", "Fixture-backed access roles, invite landing, pending, accepted, expired, and error states"], - ["Navigation & layout", "Planned", "Sidebar, breadcrumbs, command palette, company rail, mobile nav"], - ["Agent management", "Planned", "Agent properties, config forms, icon picker, action buttons, active panel"], - ["Issue management", "Planned", "Issue lists, filters, properties, documents, run ledger, workspace cards"], - ["Forms & editors", "Planned", "Markdown editor, JSON schema, env vars, schedule editor, pickers"], - ["Budget & finance", "Planned", "Incident cards, provider quotas, biller spend, subscription panels"], - ["Dialogs & modals", "Planned", "New issue/agent/goal/project dialogs, diff modal, image gallery"], - ["Projects & goals", "Planned", "Project properties, workspace cards, goal trees, runtime controls"], - ["Chat & comments", "Covered", "Comment threads, run chat, issue chat with timeline events"], - ["Data viz & misc", "Planned", "Activity charts, kanban, filter bar, live widget, onboarding, skeletons"], - ["Full app pages", "Deferred", "API-driven route stories after page data loaders can be fixture-injected"], -]; +type IndexEntry = { id: string; type: string; importPath: string }; function StorybookGuide() { + const [query, setQuery] = useState(""); + const [storyLinks, setStoryLinks] = useState>({}); + const [indexError, setIndexError] = useState(false); + useEffect(() => { + const controller = new AbortController(); + void fetch(new URL("index.json", window.location.href), { signal: controller.signal }) + .then(response => { + if (!response.ok) throw new Error("Story index unavailable"); + return response.json() as Promise<{ entries: Record }>; + }) + .then(index => { + const links: Record = {}; + for (const entry of Object.values(index.entries)) { + if (entry.type !== "story") continue; + const file = `ui/${entry.importPath.replace(/^\.\//, "")}`; + links[file] ??= `./?path=/story/${entry.id}`; + } + setStoryLinks(links); + }) + .catch(() => { if (!controller.signal.aborted) setIndexError(true); }); + return () => controller.abort(); + }, []); + const groups = useMemo(() => { + const result = new Map(); + const search = query.trim().toLowerCase(); + for (const entry of catalog.entries) { + if (search && ![entry.purpose, entry.file, entry.status, entry.implementation, ...entry.capabilities].join(" ").toLowerCase().includes(search)) continue; + const area = entry.capabilities[0]?.split("/")[0] ?? "foundations-and-guides"; + const entries = result.get(area) ?? []; + entries.push(entry); + result.set(area, entries); + } + return [...result].sort(([a], [b]) => a.localeCompare(b)); + }, [query]); return ( -
-
-
-
-
-
- - Paperclip Storybook -
-

- Board UI stories for real control-plane states -

-

- This Storybook is organized as a review workspace for Paperclip's operator UI: primitives first, - product surfaces second, and the former UX test routes as isolated fixture-backed stories. -

-
-
- React 19 - Vite - Tailwind 4 - Fixture backed -
-
-
- -
- {storyGroups.map((group) => { - const Icon = group.icon; - return ( - - -
- -
- {group.title} - {group.stories} -
- - {group.why} - -
- ); - })} -
- -
-
-
- - Coverage Map -
-
-
- {coverageRows.map(([area, status, detail]) => ( -
-
{area}
-
- - {status === "Covered" ? : null} - {status === "Planned" ? : null} - {status} - +
+
+

Storybook by feature

+

+ {catalog.entries.length} story suites organized by the feature map. Current means source-reviewed; + it does not mean every interaction or production journey passed. Production components can use simulated data. +

+

+ Historical designs and proposals stay available. Unreviewed entries need deeper comparison with the current product. + The maintained contract and full source references are in maps/storybook-map/. +

+ setQuery(event.target.value)} /> + {indexError ?

Story links could not load. Reload this guide to try again.

: null} +
+ {groups.length === 0 ?

No matching stories.

: null} + {groups.map(([area, entries]) => ( +
+

{area}

+
    + {entries.map(entry => ( +
  • +
    + {storyLinks[entry.file] + ? {entry.purpose} + : {entry.purpose}} + {entry.status} + {entry.implementation} + {entry.boundary}
    -
    {detail}
    -
+

{entry.notes}

+

{entry.capabilities.join(" · ") || "Shared foundations and contributor guidance"}

+ ))} -
+
-
-
+ ))} + ); } const meta = { title: "Overview/Storybook Guide", component: StorybookGuide, - parameters: { - docs: { - description: { - component: - "The overview story explains the local organization and the coverage contract for Paperclip's Storybook.", - }, - }, - }, + 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." } } }, } satisfies Meta; - export default meta; - type Story = StoryObj; - export const CoverageGuide: Story = {}; diff --git a/ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx b/ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx index 5fe19d676e0..b8f896f8e44 100644 --- a/ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx +++ b/ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx @@ -77,7 +77,10 @@ function InteractionAboveComposer({ interaction, mobile = false }: { interaction ); const composer = ( setMessages((current) => [...current, body])} + onAdd={async (body) => { + setMessages((current) => [...current, body]); + if (interaction.kind === "ask_user_questions") setOpen(false); + }} workMode={workMode} onWorkModeChange={setWorkMode} enableReassign @@ -96,7 +99,9 @@ function InteractionAboveComposer({ interaction, mobile = false }: { interaction hideSkip: interaction.kind !== "ask_user_questions" && interaction.kind !== "request_item_verdicts", hideLabel: interaction.kind === "request_confirmation" && Boolean(interaction.payload.toolAction), } : null} - pendingTakeover={pending ? { count: 1, label: "1 pending input", onOpen: () => setOpen(true) } : null} + pendingTakeover={pending && interaction.kind !== "ask_user_questions" + ? { count: 1, label: "1 pending input", onOpen: () => setOpen(true) } + : null} /> ); @@ -143,7 +148,7 @@ const meta = { parameters: { layout: "fullscreen", options: { showPanel: false }, - docs: { description: { component: "The production task interaction card and composer shown together. Dismissal leaves a pending indicator; Skip or a decision resolves the card. The editor remains available throughout." } }, + docs: { description: { component: "The production task interaction card and composer shown together. Dismissed questions do not contribute a composer pending indicator; other unresolved inputs retain one. Skip or a decision resolves the card. This local composition does not model persisted dismissal or the thread's history entry; use Task Chat Unanswered Questions for that fixture journey." } }, }, args: { interaction: pendingAskUserQuestionsInteraction, mobile: false }, } satisfies Meta; @@ -154,11 +159,31 @@ export const AskUserQuestions: Story = {}; export const AskUserQuestionsAndSend: Story = { play: async ({ canvasElement }) => { const canvas = within(canvasElement); - const editor = canvas.getByTestId("mdx-editor"); + const editor = canvas.getByRole("textbox", { name: "editable markdown" }); await userEvent.click(editor); await userEvent.type(editor, "I can keep working while I decide."); await userEvent.click(canvas.getByRole("button", { name: "Send" })); await expect(canvas.getByText("I can keep working while I decide.")).toBeVisible(); + await expect(canvas.queryByTestId("task-chat-composer-takeover")).not.toBeInTheDocument(); + await expect(canvas.queryByRole("button", { name: /1 pending input/i })).not.toBeInTheDocument(); + }, +}; +export const DismissQuestionWithoutPendingBadge: Story = { + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.click(canvas.getByRole("button", { name: /^Dismiss / })); + await expect(canvas.queryByTestId("task-chat-composer-takeover")).not.toBeInTheDocument(); + await expect(canvas.queryByRole("button", { name: /1 pending input/i })).not.toBeInTheDocument(); + await expect(canvas.getByRole("textbox", { name: "editable markdown" })).toBeVisible(); + }, +}; +export const DismissConfirmationKeepsPendingBadge: Story = { + args: { interaction: genericPendingRequestConfirmationInteraction }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + await userEvent.click(canvas.getByRole("button", { name: /^Dismiss / })); + await expect(canvas.getByRole("button", { name: /1 pending input/i })).toBeVisible(); + await userEvent.click(canvas.getByRole("button", { name: /1 pending input/i })); await expect(canvas.getByTestId("task-chat-composer-takeover")).toBeVisible(); }, };