diff --git a/.agents/skills/create-verification-skill/SKILL.md b/.agents/skills/create-verification-skill/SKILL.md index 782513a549b..1897be5cdcb 100644 --- a/.agents/skills/create-verification-skill/SKILL.md +++ b/.agents/skills/create-verification-skill/SKILL.md @@ -44,6 +44,11 @@ Paperclip's APIs, admitted tools and existing verification infrastructure. Run `node scripts/check-maps.mjs` after map changes. Do not create maps inside a skill directory or generate a second runtime. +For Paperclip, add navigation metadata to each feature recipe as described in the +map contract. Discovery generates the indexes; do not register new features in a +central table or commit generated catalogs. Keep review/run evidence in the PR +or evidence report and use Git for source history. + For other projects, create `.agents/skills/verify-/features/README.md` plus one file per user-facing feature you can identify (aim for the top 3-5 to start, from routes, commands, menus, or docs). Follow the shape in [`references/feature-map-example/`](references/feature-map-example/), with a README index and one file per feature. Each file answers, from the user's point of view: what the feature is, how to reach it, how to drive it with the harness, and what observable end state proves it works. The four H2s are `Sub-features`, `How to get to it (user POV)`, `Driving it with `, and `Gotchas`. The map is the repo's maintained verification source; a proof that drives one convenient entry point is incomplete when the map lists others. ## 4. Prove the generated skill before handing it over diff --git a/.agents/skills/maintain-storybook/SKILL.md b/.agents/skills/maintain-storybook/SKILL.md index 417b07ab20d..7fbb804bf0a 100644 --- a/.agents/skills/maintain-storybook/SKILL.md +++ b/.agents/skills/maintain-storybook/SKILL.md @@ -62,40 +62,38 @@ built `index.json`; use explicit meta IDs when needed and compare IDs afterward. Place stories under `ui/storybook/stories//`. Use the feature map's section and feature names as their sidebar prefix; keep useful scenario groupings beneath that prefix. Put shared fixture modules in `ui/storybook/support/`. -Keep the catalog's `stableId` equal to the explicit CSF meta ID even when the title -changes. Unmapped component examples belong under Foundations; the catalog guide +Keep the explicit CSF meta ID stable even when the title changes; the generated +catalog derives `stableId` from it. Unmapped component examples belong under Foundations; the catalog guide belongs under Overview. The checker verifies these conventions. Keep the main guide and every feature Overview congruent with the upstream index: same section/feature names and order, all capabilities in recipe order, related -suite links across primary homes, and explicit missing examples. Regenerate -`ui/storybook/generated/` and the preview config's inline `storySort.order` through -the catalog command; never hand-edit generated pages or ordering -or add generated guides to the authored catalog. Generated guides are not example -coverage. Preserve their `feature-map---overview` IDs. When an upstream area -is removed or renamed, inspect unexpected generated files and resolve them -explicitly; the generator will not silently delete them. +suite links across primary homes, and explicit missing examples. Run `node scripts/storybook-catalog.mjs` to regenerate ignored indexes, feature +pages, and preview ordering. Storybook startup/build also generates them. Never +hand-edit or commit generated output. Generated guides are not example coverage. +Preserve their `feature-map---overview` IDs. The generator removes obsolete +pages from its own ignored output directory when areas disappear. -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. +Keep review links and snapshot names working. Prefer classification fixes before +bulk directory moves. Store capability associations, classification, and durable +limits in each story's literal `parameters.paperclip` object. Infer file paths, +exports and stable IDs from CSF; do not maintain a second inventory. Use Git diff +and history to choose changed production subjects, fixtures and shared sources +for review. Record source revision and executed evidence in the PR or CI report; +do not refresh hashes, dates, or a shared review journal. -Update the catalog. Keep [verification routes](../../../maps/storybook-map/VERIFICATION.md) -aligned with the unassociated capability IDs: distinguish missing shipped UI -examples from CLI/operator operations and real browser checks. Record source -revision, concrete reasons, production contracts and existing test starting points; -test presence is not passing evidence. Do not exempt a mixed UI/API capability -wholesale. When associating a new example, update this gap inventory without -discarding its separate production verification obligations. +Verification routes belong in each feature recipe's optional `Storybook +verification` section. Report needed corrections to `maintain-verification-skill`. +Distinguish missing shipped UI examples from CLI/operator operations and real +browser checks. Keep concrete production contracts and existing test starting +points; test presence is not passing evidence. The generated verification report +lists capabilities without current examples. Associating an example must not +discard its separate production verification obligations. -Run `node scripts/storybook-catalog.mjs --write` to refresh -its generated indexes and feature pages, then run the checker without flags and -`node --test scripts/storybook-catalog.test.mjs scripts/storybook-feature-index.test.mjs`. -The script validates -inventory/references/review fingerprints, not semantic parity or runtime health. +Run `node scripts/storybook-catalog.mjs --check` and +`node --test scripts/check-maps.test.mjs scripts/storybook-catalog.test.mjs scripts/storybook-feature-index.test.mjs`. +Checks validate local annotations, discovered inventory and references, 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. diff --git a/.agents/skills/maintain-verification-skill/SKILL.md b/.agents/skills/maintain-verification-skill/SKILL.md index 8d261ef3fb4..c30385aa8d8 100644 --- a/.agents/skills/maintain-verification-skill/SKILL.md +++ b/.agents/skills/maintain-verification-skill/SKILL.md @@ -53,7 +53,8 @@ a permission denial is not authorization to widen access. 0. **Locate the target and scope.** Find the project-local verification skill (usually `.agents/skills/verify-*/`). Several candidates: ask which; none: point to `/create-verification-skill`. Honor a requested narrower audit. - Record the source commit and the last review for affected map entries. + Use Git diff/history to identify affected sources. Record the source revision + and review evidence in the PR or evidence report, not a shared map ledger. 1. **Check both indexes.** Pair same-named feature and agent files, then match stable sub-feature IDs. Fix orphan/missing entries and broken references. @@ -81,7 +82,10 @@ a permission denial is not authorization to widen access. any existing request/result handoff; an unresolved delegation question stays visible. Split broad baselines into per-operation records before marking them operation-reviewed. Add newly discovered capabilities only with concrete - source; add their companion at the same time. + source; add their companion at the same time. Each feature recipe carries its + own navigation metadata. Discovery generates the feature and access indexes; + do not register new areas in shared READMEs or commit generated output. Keep + durable Storybook verification routes in the affected feature recipe. 4. **Live pass.** Required for a verification maintenance pass even if source looks clean. The coordinator owns serial driving, using the target skill's @@ -109,7 +113,8 @@ a permission denial is not authorization to widen access. recipe or mark an access exception to bless a failure. Map evidence states remain source-only/not-run unless an actual proof supports the named operation and surface. Keep run artifacts/results in the evidence location or issue; - `maps/feature-map/coverage.json` remains documentation scope. + the generated `maps/generated/coverage.json` is a page-reference inventory, + not passing test evidence. 6. **Review corrections.** Re-read changed files, check paired IDs/references and run the smallest relevant validation. Report outcome and source/live coverage diff --git a/.agents/skills/review-storybook/SKILL.md b/.agents/skills/review-storybook/SKILL.md index 216701e4924..603b903a433 100644 --- a/.agents/skills/review-storybook/SKILL.md +++ b/.agents/skills/review-storybook/SKILL.md @@ -18,7 +18,7 @@ full source review, account for every file; do not describe sampling as full render or interaction coverage. When reviewing navigation/index changes, compare the guide and sidebar with the -feature-map README's full ordered index. Open a feature without examples and a +full ordered index generated from feature recipes' navigation metadata. Open a feature without examples and a feature whose related suite lives elsewhere; check capability order, gap messages, classifications, recipe links, and actual suite navigation. Compare built entry IDs before/after so existing links survive. Generated Overview pages do not establish diff --git a/.agents/skills/verify-paperclip/SKILL.md b/.agents/skills/verify-paperclip/SKILL.md index 9e10d7c2f90..b570578d092 100644 --- a/.agents/skills/verify-paperclip/SKILL.md +++ b/.agents/skills/verify-paperclip/SKILL.md @@ -186,8 +186,8 @@ incomplete coverage. For Paperclip-assigned work, attach important proof through [the artifact workflow](../../../doc/AGENT-ARTIFACTS.md). Keep runtime results in -the evidence directory or issue, not in the map; `coverage.json` describes -documentation coverage rather than live test health. +the evidence directory or issue, not in the map. The generated +`maps/generated/coverage.json` lists page references, not live test health. ## Cleanup diff --git a/.gitignore b/.gitignore index 20034f04bcb..8a43761535a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,9 @@ dist-flow-preview/ server/ui-dist/ packages/paperclip-runner/runner/target/ ui/storybook-static/ +ui/storybook/generated/ +ui/storybook/.storybook/preview.tsx +maps/generated/ .env *.tsbuildinfo drizzle/meta/ diff --git a/AGENTS.md b/AGENTS.md index 8060761c160..2fe511d0b0c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -181,9 +181,11 @@ 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. +evidence. Keep the feature-map skills independent of this catalog. After story or recipe changes, update the affected source annotations or +recipe and run `node scripts/storybook-catalog.mjs`. Indexes are generated and +ignored; never commit aggregate catalogs, refresh review fingerprints, or append +a shared review journal. Use Git diffs and keep review evidence in the PR or issue. +Structural checks are not production acceptance. Default local/agent test path: diff --git a/doc/DEVELOPING.md b/doc/DEVELOPING.md index 2a35c21259e..3fa2691e3f3 100644 --- a/doc/DEVELOPING.md +++ b/doc/DEVELOPING.md @@ -124,28 +124,30 @@ API responses and MCP transports keep their existing compression behavior. The board UI Storybook keeps stories and Storybook config under `ui/storybook/` so component review files stay out of the app source routes. -Stories are grouped in `ui/storybook/stories//` and the sidebar follows -the feature map's sections and feature names. Shared fixtures live in -`ui/storybook/support/`. Keep each suite's explicit meta `id` and catalog `stableId` -when changing titles or locations so existing review links remain valid. +Stories are grouped in `ui/storybook/stories//`. Feature recipe +navigation controls the sidebar. Shared fixtures live in `ui/storybook/support/`. +Keep each suite's explicit meta `id` when changing titles or locations so existing +review links remain valid. Author capability associations, implementation/data +classification and durable limitations in the story's `parameters.paperclip`. -Storybook's Overview mirrors every feature in the feature-map README, including -features without examples. Each feature's generated Overview lists its capabilities -in recipe order, related suites across primary homes, and missing examples. -`ui/storybook/generated/` holds the derived pages; the preview config's inline -`storySort.order` is generated too. Regenerate these outputs -with `node scripts/storybook-catalog.mjs --write`, not manual edits. Storybook -start/build rejects stale generated output. These guide pages are separate from -the authored story inventory and do not count as visual or behavioral coverage. +Storybook start/build generates the catalog, feature Overview pages, and literal +sidebar order from the checked-out sources. `ui/storybook/generated/` and +`ui/storybook/.storybook/preview.tsx` are ignored build outputs. Shared preview +fixtures and decorators live in `preview-base.tsx`; generation never edits it. +UI typechecking also generates the inputs on a fresh checkout. -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. +Run `node scripts/storybook-catalog.mjs` to assemble the local Markdown indexes, +verification routes and page inventory under `maps/generated/`. Use `--check` +for validation without writes. These outputs are not committed. Use Git diffs to +select affected sources for review; do not maintain review fingerprints or append +a shared review journal. Record executed evidence in the PR, issue, or CI result. + +The [Storybook map contract](../maps/storybook-map/README.md) describes annotations +and the [published guide](https://d1p6rlowie26tp.cloudfront.net/storybook/branches/master/?path=/story/overview-storybook-guide--coverage-guide). +Use `maintain-storybook` for source alignment and `review-storybook` for rendering +and interactions. Generated guides, example counts and structural checks do not +establish production behavior. Feature recipes retain optional verification +scope guidance; the feature/access structural check needs no Storybook runtime. **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 @@ -542,7 +544,7 @@ npx paperclipai allowed-hostname dotta-macbook-pro The [feature map](../maps/feature-map/README.md) is an optional reference for user entry points, targeted tests, manual verification recipes, and coverage gaps. -Its page inventory is a source snapshot. The documented journeys have separate +Its generated page inventory lists current source references. The documented journeys have separate verification steps and do not run automatically from the map. The sibling [agent access map](../maps/agent-access-map/README.md) describes API diff --git a/doc/connections/GITHUB.md b/doc/connections/GITHUB.md index e4a3724a346..e50df130dd3 100644 --- a/doc/connections/GITHUB.md +++ b/doc/connections/GITHUB.md @@ -52,6 +52,12 @@ contains those optional agent permissions. Scheduling filters, ignored files, and inline-comment options have separate disclosures. The header shows the App identity, copyable mention, avatar download, and GitHub branding settings. +Published review summaries use the GitHub bot's display name in their heading. +The check name remains **Paperclip Review**. Multiple bots can review the same +PR through separate GitHub Apps: each keeps its own task, summary, findings, and +check. Check updates match both the App ID and the endpoint/PR/commit identity. +Repository branch rules decide separately which App's check is required to merge. + ## Self-hosted setup The setup screen states the default access in one line, with **Change** for diff --git a/doc/plans/2026-10-06-default-agent-runner.md b/doc/plans/2026-10-06-default-agent-runner.md index 90a087b0996..910f305c229 100644 --- a/doc/plans/2026-10-06-default-agent-runner.md +++ b/doc/plans/2026-10-06-default-agent-runner.md @@ -10,6 +10,41 @@ saved-agent preservation, exact-candidate installation and required checks, then a normal protected merge. Production deployment and default promotion remain outside this merge campaign. +Current published candidate `57881c607fcea782ac30f601b768b2142fc2184b` +passes all required checks: 53 successful checks, two conditional Storybook skips, +fresh 5/5 automated review and 28 resolved review threads. The existing hosted Linux +login/reload case passes against its recorded CI merge. The previous failed +attempts below remain historical evidence. + +Normal reconciliation with master `7eea9d8214fec00dfde32bda7fcf9b20a428e330` +accepts its source-annotation Storybook/map migration. All 263 authored suites and +2503 story identities, exports and play counts remain intact. Retired aggregate +files and their review history remain in Git; current indexes regenerate as +ignored outputs. Durable creation/onboarding annotations describe fixture limits. The 28 +existing tooling controls, UI typecheck, token gates and 35-area/175-ID map check +pass. Independent inspection finds no change to native execution, defaults, +onboarding, credentials, workspace, DB, CLI or packaging source relative to 578. +The isolated GitHub review-heading change and Storybook build preparation retain +their incoming master source. Fresh published-head CI/review is still required. + +Literal 578 [remote package qualification](https://github.com/paperclipai/paperclip/actions/runs/38464237723) +is in progress. The [single managed onboarding attempt](https://github.com/paperclipai/paperclip/actions/runs/38464212481) +passes automatic selection, saved environment qualification, native authentication, +hire and reload, then completes two successful native runs with session continuity. +It fails the accepted-child assertion: the model puts its document/file on the +onboarding parent and finishes that parent despite the delivered first-task skill +requiring a child. Preserve this candidate failure; it is not a passing E2E cell +or complete task/follow-up proof. The owning verifier records six terminal lease +rows with successful cleanup, of which four appear in the selected report; +physical deletion and unpriced usage remain unsettled. + +The former staging QA stack is archived with a decommissioned database. Its +normal preview preparation rejects the lifecycle before deployment. A new owned +QA workspace has been provisioned through the ordinary signup path; it still +needs candidate deployment and live verification. Previous preview/runtime proof +is historical. Heavy builds remain remote, existing-agent data stays preserved, +and no production deployment, default promotion or timer is authorized here. + Published `e301c68d645eabd9fa7ae3a9450a460f6d2d0439` passes required CI with 52 successes and two conditional skips. Its fresh review finds one linked-login setup defect. Literal executable source `6c0eca871616a110954553d6ff971e7655c85f93` diff --git a/maps/README.md b/maps/README.md index d747280d101..2ea07cdd7fd 100644 --- a/maps/README.md +++ b/maps/README.md @@ -62,7 +62,7 @@ the agent path, even when a legacy agent can call the REST endpoint directly. ## Companion file format Each `agent-access-map/.md` has an H1, a relative link to its product file, -review date and source commit, followed by one H2 backticked ID per product +followed by one H2 backticked ID per product sub-feature. Each capability contains these fields: - **Review:** `baseline` or `operation-reviewed`. @@ -106,7 +106,7 @@ context; source presence alone does not qualify this operation. When a change adds/removes a capability or changes its behavior, API, permission, tool binding, CLI support, or work mode, update the affected companion and product recipe as appropriate in the same change. Preserve IDs across renames where the -capability is unchanged; update both indexes and cross-links together. An API-only +capability is unchanged; update the affected cross-links together. Indexes discover recipes automatically. An API-only change may update the companion without rewriting unchanged user instructions. [maintain-verification-skill](../.agents/skills/maintain-verification-skill/SKILL.md) @@ -122,7 +122,7 @@ Run the structural check after map changes: node scripts/check-maps.mjs ``` -It checks paired areas/IDs, indexes, required fields, and local references. It +It checks paired areas/IDs, navigation metadata, required fields, and local references. It does not certify endpoint authorization, production bindings, operation completeness, or live behavior. Source audits must check those against the existing API and tool contracts; avoid a second schema catalog or runtime. @@ -133,4 +133,21 @@ allowed result and relevant denial (another company/private resource, wrong owner, missing grant, invalid run, restricted mode or resolver). Mutations also need persisted state/attribution and retry behavior. Capture evidence using the [existing artifact workflow](../doc/AGENT-ARTIFACTS.md); keep executed run results -separate from product-map `coverage.json`, which records documentation scope. +separate from generated `maps/generated/coverage.json`, which lists page references. + +## Local authorship and generated indexes + +Change only the recipes, access contracts and stories whose behavior or intent +changed. Feature recipes own navigation metadata; stories own small +`parameters.paperclip` annotations. Do not register entries or refresh counts in +shared READMEs, inventories, fingerprints or review journals. + +`node scripts/storybook-catalog.mjs` validates and generates aggregate navigation, +Storybook data, verification routes and the page inventory. All outputs live in +ignored `maps/generated/`, `ui/storybook/generated/`, and the ignored Storybook +`preview.tsx` wrapper. Start/build and UI typechecking generate their own inputs. +A clean merged checkout therefore assembles both branches' changes automatically. + +Git provides history and diffs. PRs, issues and CI artifacts retain review/run +evidence for the named revision. Capability associations do not create whole-file +review dependencies. Keep durable scenario limits in the affected recipe or story. diff --git a/maps/agent-access-map/README.md b/maps/agent-access-map/README.md index b8d6986494d..97e156b878b 100644 --- a/maps/agent-access-map/README.md +++ b/maps/agent-access-map/README.md @@ -4,51 +4,17 @@ This map accompanies the [feature map](../feature-map/README.md). It records API agent entry points, permission boundaries and verification for the same capability IDs. The [shared contract](../README.md) defines the format and maintenance rules. -Initial inventory: **35 areas and 171 sub-features**, source-reviewed on 2026-10-12 -at `f981fa3cc10cb8663a87dec60345fbff46d54d0a`. All entries are `baseline` and `source-only`; none -claims complete operation enumeration or freshly verified agent access. Existing -API paths, native gaps, actor restrictions and local/operator exceptions are -recorded separately. These statuses do not represent a live pass rate. +## Browse access contracts -## Areas +The same-named feature recipes define navigation and capability IDs. Run +`node scripts/storybook-catalog.mjs` for the generated +`maps/generated/agent-access-map.md` index, or browse the +[published feature guide](https://d1p6rlowie26tp.cloudfront.net/storybook/branches/master/?path=/story/overview-storybook-guide--coverage-guide). +Add or update the affected companion; there is no central registration or count. -| Area | Product map | Capabilities | -| --- | --- | --- | -| [Login, invitations, and access](access.md) | [access](../feature-map/access.md) | 5 | -| [Dashboards, activity, and audit trails](activity.md) | [activity](../feature-map/activity.md) | 5 | -| [Agent conversations and project handoff](agent-chat.md) | [agent-chat](../feature-map/agent-chat.md) | 4 | -| [Hiring, agent configuration, and organization](agents.md) | [agents](../feature-map/agents.md) | 5 | -| [App access, action permissions, and testing](app-permissions.md) | [app-permissions](../feature-map/app-permissions.md) | 5 | -| [Costs, budgets, and spending controls](budgets-costs.md) | [budgets-costs](../feature-map/budgets-costs.md) | 4 | -| [Cases and structured work records](cases.md) | [cases](../feature-map/cases.md) | 4 | -| [External chat and email conversations](chat-channels.md) | [chat-channels](../feature-map/chat-channels.md) | 5 | -| [CLI, API clients, and local worktrees](cli-operations.md) | [cli-operations](../feature-map/cli-operations.md) | 5 | -| [Companies and portability](companies.md) | [companies](../feature-map/companies.md) | 4 | -| [Connection setup](connection-setup.md) | [connection-setup](../feature-map/connection-setup.md) | 8 | -| [Developer previews and diagnostic labs](developer-labs.md) | [developer-labs](../feature-map/developer-labs.md) | 4 | -| [Documents, attachments, and work products](documents-artifacts.md) | [documents-artifacts](../feature-map/documents-artifacts.md) | 5 | -| [Local, SSH, and sandbox environments](execution-environments.md) | [execution-environments](../feature-map/execution-environments.md) | 5 | -| [Tool gateways and access profiles](gateways-profiles.md) | [gateways-profiles](../feature-map/gateways-profiles.md) | 5 | -| [Goals and work alignment](goals.md) | [goals](../feature-map/goals.md) | 3 | -| [Inbox, decisions, and search](inbox-search.md) | [inbox-search](../feature-map/inbox-search.md) | 4 | -| [Installation, configuration, updates, and backups](instance-operations.md) | [instance-operations](../feature-map/instance-operations.md) | 5 | -| [Navigation, profile, and announcements](navigation-preferences.md) | [navigation-preferences](../feature-map/navigation-preferences.md) | 5 | -| [Onboarding and first work](onboarding.md) | [onboarding](../feature-map/onboarding.md) | 5 | -| [Pipelines, review queues, and learnings](pipelines.md) | [pipelines](../feature-map/pipelines.md) | 4 | -| [Plugins and contributed product surfaces](plugins.md) | [plugins](../feature-map/plugins.md) | 4 | -| [Projects and repositories](projects.md) | [projects](../feature-map/projects.md) | 4 | -| [Questions and approvals](questions-and-approvals.md) | [questions-and-approvals](../feature-map/questions-and-approvals.md) | 8 | -| [Recovery](recovery.md) | [recovery](../feature-map/recovery.md) | 8 | -| [Routines, schedules, and triggers](routines.md) | [routines](../feature-map/routines.md) | 5 | -| [Runs, harnesses, and model accounts](runs-adapters.md) | [runs-adapters](../feature-map/runs-adapters.md) | 4 | -| [Secrets, personal credentials, and proposals](secrets.md) | [secrets](../feature-map/secrets.md) | 5 | -| [Skill discovery, authoring, and policy](skills.md) | [skills](../feature-map/skills.md) | 5 | -| [Status cards and refreshed summaries](status-cards.md) | [status-cards](../feature-map/status-cards.md) | 4 | -| [Steering and queued messages](steering.md) | [steering](../feature-map/steering.md) | 7 | -| [Delegation, dependencies, and signoff](task-coordination.md) | [task-coordination](../feature-map/task-coordination.md) | 4 | -| [Task creation and lifecycle](tasks.md) | [tasks](../feature-map/tasks.md) | 5 | -| [Team packages and catalog installation](teams.md) | [teams](../feature-map/teams.md) | 4 | -| [Execution workspaces, services, and files](workspaces.md) | [workspaces](../feature-map/workspaces.md) | 5 | +Existing baseline source references describe the original inspection, not current +verification. Record new executed evidence in the PR, issue, or CI artifact with +its revision and scope. Do not refresh unrelated headers as bookkeeping. ## Using an entry diff --git a/maps/agent-access-map/chat-channels.md b/maps/agent-access-map/chat-channels.md index cc852db37d8..383d9dbed25 100644 --- a/maps/agent-access-map/chat-channels.md +++ b/maps/agent-access-map/chat-channels.md @@ -152,3 +152,6 @@ to reply. Endpoint/destination execution defaults use the same board-only management boundary. Agents select an authorized workspace for their current task through the [workspace APIs](workspaces.md), rather than editing channel configuration. + +GitHub review summary headings use the bot display name. Checks remain +independently scoped by GitHub App and endpoint/PR/commit identity. diff --git a/maps/feature-map/README.md b/maps/feature-map/README.md index 94aae4ea71c..c99d1ba3fc0 100644 --- a/maps/feature-map/README.md +++ b/maps/feature-map/README.md @@ -9,92 +9,16 @@ The sibling [agent access map](../agent-access-map/README.md) records APIs, agent entry points and permission boundaries for the same capability IDs. Follow the [shared map contract](../README.md) when maintaining either map. -## Features +## Browse features -The map is organized by user capability, not by source file. It covers **35 feature -families** across the product, CLI, and operator workflows, checked against source -on 2026-10-12. Experimental and developer-only surfaces are labeled explicitly. -Each recipe includes sub-features, current entry points, automated evidence, -manual verification steps, and gotchas. +Open the [published Storybook guide](https://d1p6rlowie26tp.cloudfront.net/storybook/branches/master/?path=/story/overview-storybook-guide--coverage-guide) +for the assembled feature and capability index. The Markdown recipes in this +directory are the authored source. Each has a same-named agent-access companion. -### Getting started and access - -| Feature | What it covers | -| --- | --- | -| [Onboarding and first work](./onboarding.md) | Instance setup, company wizard, first agent and task. | -| [Login, invitations, and access](./access.md) | Sessions, bootstrap, membership, roles, and CLI authorization. | -| [Companies and portability](./companies.md) | Company switching/settings, archival, package import/export. | - -### Tasks and conversations - -| Feature | What it covers | -| --- | --- | -| [Task creation and lifecycle](./tasks.md) | Creation, assignment, lists, properties, comments, and completion. | -| [Delegation, dependencies, and signoff](./task-coordination.md) | Child work, prerequisites, reviewers, and task-tree controls. | -| [Inbox, decisions, and search](./inbox-search.md) | Personal triage, decision queues, unread/blocked views, search, and personal task toasts. | -| [Agent conversations and project handoff](./agent-chat.md) | Persistent conversations, discovery, handoff, and gated board chat. | -| [Questions and approvals](./questions-and-approvals.md) | Question/plan responses, formal approvals, and app-tool review. | -| [Steering and queued messages](./steering.md) | Follow-ups, queue edits, interruption, and pause/resume. | -| [Documents, attachments, and work products](./documents-artifacts.md) | Versioned documents, annotations, files, outputs, and artifact library. | - -### Agents and reusable capabilities - -| Feature | What it covers | -| --- | --- | -| [Hiring, configuration, and organization](./agents.md) | Agent identity, instructions, reporting lines, lifecycle, and built-ins. | -| [Runs, harnesses, and model accounts](./runs-adapters.md) | Adapter/model setup, account validation, transcripts, and run history. | -| [Skills and Skill Studio](./skills.md) | Discovery, sources, authoring, revisions, tests, and agent policies. | -| [Team packages and installation](./teams.md) | Catalog preview/install via CLI/API; catalog UI availability called out. | - -### Projects and execution - -| Feature | What it covers | -| --- | --- | -| [Projects and repositories](./projects.md) | Project lifecycle, task context, repository configuration, and defaults. | -| [Goals and work alignment](./goals.md) | Goal hierarchy, ownership, status, and project/task context. | -| [Workspaces, services, and files](./workspaces.md) | Provisioning, task bindings, services/logs, Git/files, and closure. | -| [Execution environments](./execution-environments.md) | Local, SSH, sandbox providers, target probes, and custom images. | -| [Recovery](./recovery.md) | Stopped work, workspace repair, bounded continuation, and reconnect. | - -### Apps, channels, and extensions - -| Feature | What it covers | -| --- | --- | -| [Connection setup](./connection-setup.md) | Catalog, MCP links, task requests, authentication, and setup resumption. | -| [App access and action permissions](./app-permissions.md) | Agent grants, off/ask/allowed actions, discovery, tests, and revocation. | -| [External chat and email](./chat-channels.md) | Provider-specific identity, threads, files, delivery, and endpoint upkeep. | -| [Tool gateways and access profiles](./gateways-profiles.md) | Tool exposure, client configuration, tokens, profiles, and activity. | -| [Secrets and proposals](./secrets.md) | Company/user credentials, grants, proposals, and vault import. | -| [Plugins](./plugins.md) | Installation/configuration, contributed pages/tools, and lifecycle. | - -### Automation and structured work - -| Feature | What it covers | -| --- | --- | -| [Routines, schedules, and triggers](./routines.md) | Definitions, variables, scheduled/webhook/manual runs, and history. | -| [Pipelines, review queues, and learnings](./pipelines.md) | Experimental stages, automation, items, review, and learning records. | -| [Cases](./cases.md) | Experimental structured fields, relationships, revisions, and task links. | -| [Status cards](./status-cards.md) | Experimental summaries, watched work, refresh history, and settings. | - -### Oversight and operation - -| Feature | What it covers | -| --- | --- | -| [Costs and budgets](./budgets-costs.md) | Spend reports, scoped limits, incidents, hard stops, and resumption. | -| [Dashboards and audit trails](./activity.md) | Company health, live work, activity, runs, routines, and timeline. | -| [Navigation, profile, and announcements](./navigation-preferences.md) | Sidebar state, favorites/recents, personal identity, and dismissals. | -| [Instance operations](./instance-operations.md) | Installation, updates, service health, configuration, and backups. | -| [CLI/API and local worktrees](./cli-operations.md) | Explicit context, resource commands, outputs, runs, and isolated instances. | - -### Contributor surfaces - -| Feature | What it covers | -| --- | --- | -| [Developer previews and diagnostic labs](./developer-labs.md) | Design examples, interaction fixtures, performance checks; not production acceptance. | - -These are verification instructions, not a claim that every journey passed a live -test. A component test proves its component; a scripted provider proves that -fixture integration. Record executed results separately from the map. +Run `node scripts/storybook-catalog.mjs` to generate local navigation in +`maps/generated/feature-map.md`, `maps/generated/agent-access-map.md`, and the +Storybook guide. A new recipe is discovered automatically; do not register it in +this README or maintain counts here. ## Before driving a journey @@ -142,40 +66,46 @@ For Paperclip-assigned work, attach evidence through the ## Inventory and remaining depth -[The UI coverage inventory](./coverage.json) accounts for every non-test TSX -module under `ui/src/pages`, including supporting panels, legacy variants, and -labs. Every product area now links to concrete recipes. **Partial** means the -area still has the named variant or workflow gaps; **unmapped** is reserved for -an area with no recipe. These statuses describe documentation, not runtime health. - -The page inventory is a source snapshot dated 2026-10-05. The map also -includes entry points hosted inside other modules (pipeline Review Queue and -Learnings, task documents, onboarding), CLI-only operations, and operator work. -The team recipe explicitly distinguishes the current CLI/API path from catalog -UI components without a current top-level route. Refer to [route registration](../../ui/src/App.tsx) -and the [CLI registry](../../cli/src/index.ts) when changing reachability. - -Remaining depth includes complete provider/auth/attachment matrices, every -harness/model/environment capability combination, third-party plugin features, -and every role/error/mobile/legacy-shell permutation. The recipes name relevant -gaps instead of equating source presence with a working user journey. The index -can include capabilities that do not add a page file. +The generated `maps/generated/coverage.json` lists the current non-test TSX page +modules and the recipes that directly reference each one. An unreferenced module +is a documentation candidate, not proof that its feature is absent or untested. +Remaining workflow limits live in each recipe. Inventory and example associations +describe documentation scope, not runtime health. ## Maintaining the reference The map documents user journeys. It does not execute them automatically; -`coverage.json` records documentation scope rather than live test health. +generated inventories record documentation scope rather than live test health. When maintaining a recipe, compare its entry points and expected results with the current source. Check that linked tests still exercise the stated behavior -and that local references still exist. Refresh the inventory snapshot when it -helps explain the current product. Keep the same-named agent access companion +and that local references still exist. Keep the same-named agent access companion and stable sub-feature IDs aligned when behavior or access changes. Source-only access inventory remains distinct from live verification. Run `node scripts/check-maps.mjs` after map edits for structural/reference checks; follow the shared contract for the source and behavioral checks it cannot perform. -Each recipe starts with an H1 and a user-visible description, then exactly: +Each recipe starts with a small frontmatter navigation record, then an H1: + +```markdown +--- +navigation: {"section":"Tasks and conversations","sectionOrder":20,"order":10} +--- +``` + +The H1 supplies the feature title, and the first paragraph supplies its summary. +Orders are local to the section; leave gaps for additions. Equal orders use the +stable filename as a tie-breaker. Keep a section's name/order consistent across +its recipes. A new feature or capability needs only its recipe and companion. + +Optional `### Storybook verification` guidance lives inside the recipe's Gotchas +section. Each level-four heading contains a backtick-quoted capability key and +has `Scope` (`ui`, `cli`, or `browser`), +`Storybook`, `Production`, and `Sources` fields. These are verification instructions +and intentional scope limits, not run results or a required story for every API. +The generated gap report combines this guidance with current story associations. + +After frontmatter, each recipe starts with an H1 and a user-visible description, then exactly: 1. **Sub-features** — stable backticked IDs and observable behavior/states. 2. **How to get to it (user POV)** — one H3 backticked entry-point ID per surface. diff --git a/maps/feature-map/access.md b/maps/feature-map/access.md index 7bfed7126ee..406adb138f8 100644 --- a/maps/feature-map/access.md +++ b/maps/feature-map/access.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Getting started and access","sectionOrder":10,"order":20} +--- + # Login, invitations, and access People and agents enter the correct instance and company with the permissions granted to their identity. Login, membership, resource access, and CLI authorization have separate controls. @@ -62,3 +66,26 @@ logout alone does not establish that server revocation succeeded. - Settings visibility is not authorization; direct requests still need permission checks. - An agent bearer key must not gain another company’s access. - Never put invite tokens, session cookies, or API keys in verification evidence. + +### Storybook verification + +#### `login` + +Scope: ui +Storybook: Sign-in form, pending and invalid credentials, deployment-mode claim gate, expired claim. +Production: Authenticate and reload company deep link; sign out and confirm session enforcement; reject invalid bootstrap claim. +Sources: Source: [Auth.tsx](../../ui/src/pages/Auth.tsx), [BoardClaim.tsx](../../ui/src/pages/BoardClaim.tsx), [board-claim.ts](../../server/src/board-claim.ts). Tests: [Auth.test.tsx](../../ui/src/pages/Auth.test.tsx), [auth-session-route.test.ts](../../server/src/__tests__/auth-session-route.test.ts), [board-claim.test.ts](../../server/src/__tests__/board-claim.test.ts) + +#### `membership` + +Scope: ui +Storybook: Member and join-request lists; editable versus read-only roles; pending change, rejected request, revoked invite. +Production: Persist role/membership changes; enforce actual actor authority, invite replay/expiry and cross-company denial. +Sources: Source: [CompanyAccess.tsx](../../ui/src/pages/CompanyAccess.tsx), [authz.ts](../../server/src/routes/authz.ts). Tests: [CompanyAccess.test.tsx](../../ui/src/pages/CompanyAccess.test.tsx), [invite-accept-replay.test.ts](../../server/src/__tests__/invite-accept-replay.test.ts), [multi-user-authenticated.spec.ts](../../tests/e2e/multi-user-authenticated.spec.ts) + +#### `cli-auth` + +Scope: ui +Storybook: CLI authorization approval, pending, expired/denied and already-authorized states. +Production: Authorize intended CLI identity/context, make scoped request, revoke current server token and retry same bearer; logout alone is insufficient. +Sources: Source: [CliAuth.tsx](../../ui/src/pages/CliAuth.tsx). Tests: [cli-auth-routes.test.ts](../../server/src/__tests__/cli-auth-routes.test.ts), [board-auth.test.ts](../../cli/src/__tests__/board-auth.test.ts), [token.test.ts](../../cli/src/__tests__/token.test.ts) diff --git a/maps/feature-map/activity.md b/maps/feature-map/activity.md index 49f9489906f..7763cad03ed 100644 --- a/maps/feature-map/activity.md +++ b/maps/feature-map/activity.md @@ -1,4 +1,8 @@ -# Dashboards, activity, and audit trails +--- +navigation: {"section":"Oversight and operation","sectionOrder":70,"order":20} +--- + +# Dashboards and audit trails People inspect company health, recent activity, run history, and routine activity, then follow evidence back to the task or agent responsible. @@ -56,3 +60,12 @@ the routine rather than treating that component test as a reachable journey. - Audit/activity events, run-log rows, first-party Telemetry, and operator OpenTelemetry traces are separate data paths. - A healthy stream or dashboard counter alone does not prove task success. - Cost and budget reports have their own [recipe](./budgets-costs.md). + +### Storybook verification + +#### `runs` + +Scope: ui +Storybook: Mount AuditRuns selected status/agent/routine, linked task/agent, empty/loading/error/retry and 200-entry limit. Do not invent pagination. +Production: GET /companies/{id}/heartbeat-runs and /routines/{id}/runs require company/read/privacy checks; real browser follows context links and confirms the referenced execution. +Sources: Source: [AuditRuns.tsx](../../ui/src/pages/audit/AuditRuns.tsx), [heartbeats.ts](../../ui/src/api/heartbeats.ts), [routines.ts](../../ui/src/api/routines.ts). Tests: [AuditRuns.test.tsx](../../ui/src/pages/audit/AuditRuns.test.tsx), [heartbeat-run-privacy-routes.test.ts](../../server/src/__tests__/heartbeat-run-privacy-routes.test.ts), [routines-service.test.ts](../../server/src/__tests__/routines-service.test.ts) diff --git a/maps/feature-map/agent-chat.md b/maps/feature-map/agent-chat.md index 7152588c2fc..a5fc7048e1d 100644 --- a/maps/feature-map/agent-chat.md +++ b/maps/feature-map/agent-chat.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Tasks and conversations","sectionOrder":20,"order":40} +--- + # Agent conversations and project handoff A person can hold a persistent conversation with an agent, return to its history, and hand useful work into a project or task. The gated conference-room chat is a separate conversation surface. @@ -61,3 +65,12 @@ Manual: Check disabled access first, enable in the disposable instance, then sen - Idle chat is not failed execution. - See [steering](./steering.md) for in-flight messages and [questions](./questions-and-approvals.md) for interactions. - An API tool test does not prove that every harness will choose the same handoff tool. + +### Storybook verification + +#### `conference-room` + +Scope: ui +Storybook: Conference-room flag disabled, empty/history/reply, busy and explicit failure states. +Production: Exercise separate BoardChat route gate, local-trusted deployment and authenticated Claude CLI; send/reload real conversation with responding agent attribution. +Sources: Source: [BoardChat.tsx](../../ui/src/pages/BoardChat.tsx), [board-chat.ts](../../server/src/routes/board-chat.ts). Tests: [BoardChat.test.tsx](../../ui/src/pages/BoardChat.test.tsx), [board-chat-route-feature-flag.test.ts](../../server/src/__tests__/board-chat-route-feature-flag.test.ts) diff --git a/maps/feature-map/agents.md b/maps/feature-map/agents.md index 530fa55562c..440401db8d3 100644 --- a/maps/feature-map/agents.md +++ b/maps/feature-map/agents.md @@ -1,4 +1,8 @@ -# Hiring, agent configuration, and organization +--- +navigation: {"section":"Agents and reusable capabilities","sectionOrder":30,"order":10} +--- + +# Hiring, configuration, and organization Operators hire agents, configure their identity and instructions, assign reporting relationships, and manage their lifecycle. Built-in agents have their own setup and lifecycle constraints. @@ -107,3 +111,7 @@ over the primary fallback. Opening Chat must not start execution. - Skill and tool grants are separate: see [skills](./skills.md) and [app permissions](./app-permissions.md). - A personal primary agent is a per-user/company preference. It does not change reporting lines, stars, permissions, or another person's primary agent. + +### Documentation scope: Agents, organization, and runtime setup + +Per-harness/model/account capabilities, every instruction-file error, and complete built-in-agent lifecycle variants remain separate qualification matrices. diff --git a/maps/feature-map/app-permissions.md b/maps/feature-map/app-permissions.md index 7726294d328..521ca22fec0 100644 --- a/maps/feature-map/app-permissions.md +++ b/maps/feature-map/app-permissions.md @@ -1,4 +1,8 @@ -# App access, action permissions, and testing +--- +navigation: {"section":"Apps, channels, and extensions","sectionOrder":50,"order":20} +--- + +# App access and action permissions After connecting an app, an operator decides which agents may use it and whether each action is off, requires approval, or is allowed. Activity and action tests help verify the resulting access. @@ -45,3 +49,12 @@ Manual: Run a read-only action with explicit inputs and inspect returned data an - Connected does not imply an agent has access or an action is allowed. - Credential-only connections may replace tool-action controls with account-specific controls. - See [connection setup](./connection-setup.md) for auth and [questions and approvals](./questions-and-approvals.md) for pending action review. + +### Storybook verification + +#### `catalog-change` + +Scope: ui +Storybook: Mount PermissionsPanel/AppDetail with quarantined actions, selection/review, refresh pending, empty and failed discovery states. Existing auto-allowed NewToolsAllowed examples are not quarantine review. +Production: Exercise catalog refresh and new-tool review with permitted/denied actors; unreviewed actions stay quarantined, prior Off/Ask choices survive refresh, and approved review persists. +Sources: Source: [PermissionsPanel.tsx](../../ui/src/pages/apps/app-detail/PermissionsPanel.tsx), [AppDetail.tsx](../../ui/src/pages/apps/AppDetail.tsx), [tool-access.ts](../../server/src/routes/tool-access.ts). Tests: [AppDetail.test.tsx](../../ui/src/pages/apps/AppDetail.test.tsx), [tool-access-service.test.ts](../../server/src/__tests__/tool-access-service.test.ts), [tool-access-policy-service.test.ts](../../server/src/__tests__/tool-access-policy-service.test.ts) diff --git a/maps/feature-map/budgets-costs.md b/maps/feature-map/budgets-costs.md index 2c7fed9149e..1a71daec1c7 100644 --- a/maps/feature-map/budgets-costs.md +++ b/maps/feature-map/budgets-costs.md @@ -1,4 +1,8 @@ -# Costs, budgets, and spending controls +--- +navigation: {"section":"Oversight and operation","sectionOrder":70,"order":10} +--- + +# Costs and budgets Operators inspect recorded spend and configure budget controls for the company, projects, and agents. Hard stops pause or prevent eligible work until the governing incident is resolved. @@ -47,3 +51,12 @@ Manual: Create a small fixture budget, cross its threshold with synthetic record - Paperclip cost accounting is not a provider invoice or a promise about externally billed spend. - Company, project, and agent gates can overlap; fixing one may leave another active. - A successful retry must not bypass an unresolved budget hold. + +### Storybook verification + +#### `resolution` + +Scope: ui +Storybook: Mount BudgetIncidentCard with entered raised limit, invalid limit, keep-paused, applying, authorized/blocked and error states wired through actual host. Existing matrix handlers are no-ops. +Production: POST /companies/{id}/budget-incidents/{id}/resolve must authorize scope-specific raise, persist resolution and resume eligible work while retaining overlapping budget/manual holds. +Sources: Source: [BudgetIncidentCard.tsx](../../ui/src/components/BudgetIncidentCard.tsx), [Costs.tsx](../../ui/src/pages/Costs.tsx), [budgets.ts](../../ui/src/api/budgets.ts), [costs.ts](../../server/src/routes/costs.ts), [budgets.ts](../../server/src/services/budgets.ts). Tests: [budgets-service.test.ts](../../server/src/__tests__/budgets-service.test.ts), [Costs.test.tsx](../../ui/src/pages/Costs.test.tsx) diff --git a/maps/feature-map/cases.md b/maps/feature-map/cases.md index a36ad4b9c13..41fccd07fc2 100644 --- a/maps/feature-map/cases.md +++ b/maps/feature-map/cases.md @@ -1,4 +1,8 @@ -# Cases and structured work records +--- +navigation: {"section":"Automation and structured work","sectionOrder":60,"order":30} +--- + +# Cases The cases experiment exposes structured records with types, fields, parent/child relationships, activity, revisions, and related task work. @@ -49,3 +53,33 @@ pipeline-owned item from a stand-alone case. - Feature gating and offered controls determine available actions. The API accepts a string case type and arbitrary JSON fields; do not infer typed case-field validation or a field-editing UI from those values. + +### Storybook verification + +#### `browse` + +Scope: ui +Storybook: Mount Cases search/filter/sort/group/tree, matched-child parent context, persisted view choices, keyboard navigation and empty/loading/error. +Production: GET /companies/{id}/cases scope/filter behavior is production evidence; rendered fixtures establish presentation only. Mutation/permission scenarios need real API checks separately. +Sources: Source: [Cases.tsx](../../ui/src/pages/Cases.tsx), [cases.ts](../../server/src/routes/cases.ts). Tests: [Cases.test.tsx](../../ui/src/pages/Cases.test.tsx), [cases-routes.test.ts](../../server/src/__tests__/cases-routes.test.ts) + +#### `structure` + +Scope: ui +Storybook: Mount CaseDetail and CaseFieldsPanel with arbitrary JSON fields and parent/children, matching descendants and unavailable child. Do not invent a general field editor or typed field validation. +Production: GET /cases/{id} and /cases/{id}/children/tree must return permitted company records and correct relationships; changes/persistence require route tests separately. +Sources: Source: [CaseDetail.tsx](../../ui/src/pages/CaseDetail.tsx), [CaseFieldsPanel.tsx](../../ui/src/components/CaseFieldsPanel.tsx), [Cases.tsx](../../ui/src/pages/Cases.tsx), [cases.ts](../../server/src/routes/cases.ts), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [CaseFieldsPanel.test.tsx](../../ui/src/components/CaseFieldsPanel.test.tsx), [Cases.test.tsx](../../ui/src/pages/Cases.test.tsx), [CaseDetail.test.tsx](../../ui/src/pages/CaseDetail.test.tsx), [cases-routes.test.ts](../../server/src/__tests__/cases-routes.test.ts) + +#### `history` + +Scope: ui +Storybook: Mount CaseDetail activity and document revisions as distinct views, empty/loading/errors, attribution and source links. +Production: GET /cases/{id}/events and /cases/{id}/documents/{key}/revisions require company/access filtering; a fixture list does not establish durable revision creation or restoration. +Sources: Source: [CaseDetail.tsx](../../ui/src/pages/CaseDetail.tsx), [cases.ts](../../server/src/routes/cases.ts). Tests: [CaseDetail.test.tsx](../../ui/src/pages/CaseDetail.test.tsx), [cases-routes.test.ts](../../server/src/__tests__/cases-routes.test.ts) + +#### `task-links` + +Scope: ui +Storybook: Mount CaseDetail and IssueCasesPanel related-task/case links in both directions, missing links and unavailable targets. +Production: GET /issues/{id}/cases and /cases/{id}/issue-links must enforce permitted task/case relationships; production browser cold links verify destination and company context. +Sources: Source: [CaseDetail.tsx](../../ui/src/pages/CaseDetail.tsx), [IssueCasesPanel.tsx](../../ui/src/components/IssueCasesPanel.tsx), [cases.ts](../../server/src/routes/cases.ts), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [IssueCasesPanel.test.tsx](../../ui/src/components/IssueCasesPanel.test.tsx), [CaseDetail.test.tsx](../../ui/src/pages/CaseDetail.test.tsx), [cases-routes.test.ts](../../server/src/__tests__/cases-routes.test.ts) diff --git a/maps/feature-map/chat-channels.md b/maps/feature-map/chat-channels.md index edc4337e531..71e9cee82da 100644 --- a/maps/feature-map/chat-channels.md +++ b/maps/feature-map/chat-channels.md @@ -1,4 +1,8 @@ -# External chat and email conversations +--- +navigation: {"section":"Apps, channels, and extensions","sectionOrder":50,"order":30} +--- + +# External chat and email People can talk to an assigned agent through configured external channels, bind their identity, exchange files, and inspect delivery state. Each provider has a different identity, threading, and attachment contract. @@ -50,6 +54,10 @@ Automated: [channel integration](../../server/src/__tests__/chat-channels.integr Manual: Inspect the bound agent and identity, recent activity, and delivery failure details. Repair a disposable credential, retry a safe message when offered, and verify exactly one external reply. Disable the endpoint and confirm new traffic is not silently processed. +For GitHub, submit a disposable PR and verify the summary heading uses the bot's +display name and the check remains **Paperclip Review**. For two separate bots on one PR, verify +their App-scoped checks and comments remain independent. + Configure optional project and workspace defaults at the connection and destination levels. Start a new conversation and inspect its task workspace. Verify that inheritance, an explicit selection, and clearing a default remain distinct. @@ -63,3 +71,16 @@ Changing defaults must not move an existing conversation or interrupt its run. - One provider’s passing fixture does not qualify another provider or live delivery. - An accepted send request does not prove the recipient received the message or file. - Use [steering](./steering.md) and [questions](./questions-and-approvals.md) for their channel-specific interaction checks. + +### Storybook verification + +#### `attachments` + +Scope: ui +Storybook: Mount TaskChatBubble attachments and ChatEndpointDetail provider-specific consent/upload/delivery failure and unknown-outcome states. Local email attachment dialog remains a prototype. +Production: Transfer a disposable supported file through each affected provider; verify recipient delivery, read scope, duplicate/replay handling and failure/unknown state without treating notification as file-upload proof. +Sources: Source: [TaskChatBubble.tsx](../../ui/src/components/task-chat/TaskChatBubble.tsx), [ChatEndpointDetail.tsx](../../ui/src/pages/apps/chat/ChatEndpointDetail.tsx), [chatEndpoints.ts](../../ui/src/api/chatEndpoints.ts), [chat-channels.ts](../../server/src/routes/chat-channels.ts). Tests: [TaskChatBubble.test.tsx](../../ui/src/components/task-chat/TaskChatBubble.test.tsx), [task-chat-attachments.test.ts](../../ui/src/components/task-chat/task-chat-attachments.test.ts), [chat-channels.integration.test.ts](../../server/src/__tests__/chat-channels.integration.test.ts), [issue-attachment-routes.test.ts](../../server/src/__tests__/issue-attachment-routes.test.ts) + +### Documentation scope: Chat and email channel setup + +Shared recipes name provider checks; each provider transport/thread/identity/file-size/type combination needs separate live evidence and deeper instructions. diff --git a/maps/feature-map/cli-operations.md b/maps/feature-map/cli-operations.md index e3ddaeb6e38..b8ad053c22c 100644 --- a/maps/feature-map/cli-operations.md +++ b/maps/feature-map/cli-operations.md @@ -1,4 +1,8 @@ -# CLI, API clients, and local worktrees +--- +navigation: {"section":"Oversight and operation","sectionOrder":70,"order":50} +--- + +# CLI/API and local worktrees Operators and agents can work through explicit CLI/API context, manage domain resources, inspect runs, and create isolated local worktree instances for development. @@ -60,3 +64,40 @@ Manual: Initialize an owned disposable worktree instance, inspect its printed pa - API success proves its contract, not the equivalent browser creation journey. - The CLI command registry is broader than the UI page inventory; new command families need a recipe review. - See [instance operations](./instance-operations.md) for install/update/backup and feature-specific recipes for domain behavior. + +### Storybook verification + +#### `context` + +Scope: cli +Storybook: No authored story required for CLI profile/context selection. +Production: Verify selected API origin, identity and company, JSON output and invalid-token/wrong-company failures. A persona label is not authentication. +Sources: Source: [context.ts](../../cli/src/commands/client/context.ts). Tests: [context.test.ts](../../cli/src/__tests__/context.test.ts), [http.test.ts](../../cli/src/__tests__/http.test.ts) + +#### `domain-commands` + +Scope: cli +Storybook: No authored story required for command parsing and domain API execution; corresponding product UI keeps its own story needs. +Production: Discover registered help, use a disposable company, assert persisted mutations and denied operations with the actual actor. Command parity is not every endpoint passing live. +Sources: Source: [index.ts](../../cli/src/index.ts), [issue.ts](../../cli/src/commands/client/issue.ts). Tests: [operations-parity.test.ts](../../cli/src/__tests__/operations-parity.test.ts) + +#### `outputs` + +Scope: cli +Storybook: No authored story required for CLI document/asset/skill IO or machine-readable output. +Production: Assert payload/schema, exit code, written contents, authorization and file integrity. Open the resulting document/asset in the product for cross-surface acceptance. +Sources: Source: [issue.ts](../../cli/src/commands/client/issue.ts), [asset.ts](../../cli/src/commands/client/asset.ts), [skill.ts](../../cli/src/commands/client/skill.ts). Tests: [issue-subresources.test.ts](../../cli/src/__tests__/issue-subresources.test.ts), [admin-asset-skill-parity.test.ts](../../cli/src/__tests__/admin-asset-skill-parity.test.ts) + +#### `run-controls` + +Scope: cli +Storybook: No authored story required for invoke/list/get/cancel/events/log command execution. +Production: Assert the real run ID, event/log output and resulting state, eligible actor and cancellation denial. Printed success does not prove provider completion. +Sources: Source: [run.ts](../../cli/src/commands/client/run.ts), [heartbeat-run.ts](../../cli/src/commands/heartbeat-run.ts). Tests: [operations-parity.test.ts](../../cli/src/__tests__/operations-parity.test.ts) + +#### `worktree-instances` + +Scope: cli +Storybook: No authored story required for worktree initialize/seed/repair/cleanup commands. +Production: Use only an owned isolated checkout/instance; verify paths, ports, health, login and seed provenance, then cleanup ownership. Capture evidence before teardown. +Sources: Source: [worktree.ts](../../cli/src/commands/worktree.ts), [test-drive.ts](../../cli/src/commands/test-drive.ts). Tests: [worktree.test.ts](../../cli/src/__tests__/worktree.test.ts), [test-drive.test.ts](../../cli/src/__tests__/test-drive.test.ts) diff --git a/maps/feature-map/companies.md b/maps/feature-map/companies.md index b4fbbfed251..12b7caac314 100644 --- a/maps/feature-map/companies.md +++ b/maps/feature-map/companies.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Getting started and access","sectionOrder":10,"order":30} +--- + # Companies and portability An operator can switch between companies, change their identity and settings, archive them, and preview an import or export. Each company remains a separate scope for work and agents. @@ -76,3 +80,30 @@ Use an owned provider fixture for failure states; record any actual provider usa A fast-response receipt is an acknowledgement, not completed agent work. History visibility and connection-management authority are separate; task links in history also require access to the underlying task. + +### Storybook verification + +#### `selection` + +Scope: ui +Storybook: Company list/create/switcher; empty, loading, error, unavailable company and switched navigation. +Production: Switch and reload between companies; verify tasks/agents/cache/routes remain scoped and unauthorized company requests fail. +Sources: Source: [Companies.tsx](../../ui/src/pages/Companies.tsx), [CompanySwitcher.tsx](../../ui/src/components/CompanySwitcher.tsx), [CompanyContext.tsx](../../ui/src/context/CompanyContext.tsx). Tests: [Companies.test.tsx](../../ui/src/pages/Companies.test.tsx), [CompanyContext.test.tsx](../../ui/src/context/CompanyContext.test.tsx), [companies-route-cross-company-authz.test.ts](../../server/src/__tests__/companies-route-cross-company-authz.test.ts) + +#### `archive` + +Scope: ui +Storybook: Archive confirmation, pending/error and departure navigation; archived list entry and Unarchive action. +Production: Archive eligible agents/runs without deleting history; restoration handles archival-specific pause and navigates to correct company. +Sources: Source: [CompanySettings.tsx](../../ui/src/pages/CompanySettings.tsx), [Companies.tsx](../../ui/src/pages/Companies.tsx), [companies.ts](../../ui/src/api/companies.ts). Tests: [CompanySettingsArchive.test.tsx](../../ui/src/pages/CompanySettingsArchive.test.tsx), [Companies.test.tsx](../../ui/src/pages/Companies.test.tsx), [companies-service.test.ts](../../server/src/__tests__/companies-service.test.ts) + +#### `portability` + +Scope: ui +Storybook: Import/export preview, conflict choice, warnings, async progress/failure/success and restricted managed deployment. +Production: Apply real small package to disposable target; inspect counts/references/conflicts, source immutability and credential exclusions; imported task requires separate runnable-account proof. +Sources: Source: [CompanyImport.tsx](../../ui/src/pages/CompanyImport.tsx), [CompanyExport.tsx](../../ui/src/pages/CompanyExport.tsx), [companies.ts](../../ui/src/api/companies.ts). Tests: [CompanyImport.test.tsx](../../ui/src/pages/CompanyImport.test.tsx), [CompanyExport.test.tsx](../../ui/src/pages/CompanyExport.test.tsx), [company-portability-routes.test.ts](../../server/src/__tests__/company-portability-routes.test.ts), [company-import-export-e2e.test.ts](../../cli/src/__tests__/company-import-export-e2e.test.ts) + +### Documentation scope: Company and instance administration + +Core administration/import/export/operator workflows are mapped; cloud/self-hosted differences, migration/restore compatibility, and platform-specific service variants need deeper recipes. diff --git a/maps/feature-map/connection-setup.md b/maps/feature-map/connection-setup.md index f98f29b4721..bc4257662a8 100644 --- a/maps/feature-map/connection-setup.md +++ b/maps/feature-map/connection-setup.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Apps, channels, and extensions","sectionOrder":50,"order":10} +--- + # Connection setup People connect an app or account, choose who may use it, and recover incomplete @@ -160,3 +164,7 @@ Slack setup does not qualify Discord, Telegram, GitHub, email, or iMessage. - Full provider matrix, AI-account selection, gateway/profile administration, and account revocation lifecycles remain outside this seed recipe. - For governed actions after setup, use [questions and approvals](./questions-and-approvals.md). + +### Documentation scope: App catalog and connection setup + +Provider-specific authentication/revocation, credential-only accounts, and aggregator administrative variants still need their own detailed matrices. diff --git a/maps/feature-map/coverage.json b/maps/feature-map/coverage.json deleted file mode 100644 index 7fc99df425e..00000000000 --- a/maps/feature-map/coverage.json +++ /dev/null @@ -1,401 +0,0 @@ -{ - "version": 1, - "areas": [ - { - "id": "tasks-and-attention", - "title": "Tasks, conversations, and attention", - "status": "partial", - "features": [ - "tasks.md", - "task-coordination.md", - "inbox-search.md", - "agent-chat.md", - "questions-and-approvals.md", - "steering.md", - "recovery.md", - "documents-artifacts.md" - ], - "gap": "Recipes cover the main task/conversation/attention workflows. Full shell, permission, attachment, long-thread, and concurrency permutations remain to be enumerated.", - "paths": [ - "ui/src/pages/AgentChat.tsx", - "ui/src/pages/AgentChats.tsx", - "ui/src/pages/BoardChat.tsx", - "ui/src/pages/DecisionQueuePage.tsx", - "ui/src/pages/Inbox.tsx", - "ui/src/pages/IssueDetail.tsx", - "ui/src/pages/Issues.tsx", - "ui/src/pages/LegacyInbox.tsx", - "ui/src/pages/MyIssues.tsx", - "ui/src/pages/Search.tsx", - "ui/src/pages/WhatNeedsMe.tsx" - ] - }, - { - "id": "agents", - "title": "Agents, organization, and runtime setup", - "status": "partial", - "features": [ - "agents.md", - "runs-adapters.md", - "skills.md", - "app-permissions.md", - "recovery.md", - "execution-environments.md" - ], - "gap": "Per-harness/model/account capabilities, every instruction-file error, and complete built-in-agent lifecycle variants remain separate qualification matrices.", - "paths": [ - "ui/src/pages/AdapterManager.tsx", - "ui/src/pages/AgentDetail.production.tsx", - "ui/src/pages/AgentDetail.tsx", - "ui/src/pages/AgentToolsTab.tsx", - "ui/src/pages/Agents.production.tsx", - "ui/src/pages/Agents.tsx", - "ui/src/pages/NewAgent.tsx", - "ui/src/pages/Org.tsx", - "ui/src/pages/OrgChart.production.tsx", - "ui/src/pages/OrgChart.tsx" - ] - }, - { - "id": "apps", - "title": "App catalog and connection setup", - "status": "partial", - "features": [ - "connection-setup.md", - "app-permissions.md", - "questions-and-approvals.md" - ], - "gap": "Provider-specific authentication/revocation, credential-only accounts, and aggregator administrative variants still need their own detailed matrices.", - "paths": [ - "ui/src/pages/apps/AggregatorAppManager.tsx", - "ui/src/pages/apps/AggregatorConnectDialog.tsx", - "ui/src/pages/apps/AppDetail.tsx", - "ui/src/pages/apps/AppLogo.tsx", - "ui/src/pages/apps/AppNotConnected.tsx", - "ui/src/pages/apps/AppsConnect.tsx", - "ui/src/pages/apps/AppsReview.tsx", - "ui/src/pages/apps/ArcadeDiscoverySetup.tsx", - "ui/src/pages/apps/Browse.tsx", - "ui/src/pages/apps/CatalogSourceFilters.tsx", - "ui/src/pages/apps/ComposioAppManager.tsx", - "ui/src/pages/apps/ComposioAppSetup.tsx", - "ui/src/pages/apps/ConnectionProvenanceChip.tsx", - "ui/src/pages/apps/Connections.tsx", - "ui/src/pages/apps/ExecutorManagementSetup.tsx", - "ui/src/pages/apps/PaperclipCloudOAuthHandoff.tsx", - "ui/src/pages/apps/ReviewQueueCard.tsx", - "ui/src/pages/apps/UnverifiedServerBadge.tsx", - "ui/src/pages/apps/app-detail/ActionTestDialog.tsx", - "ui/src/pages/apps/app-detail/ActivityPanel.tsx", - "ui/src/pages/apps/app-detail/AdvancedPanel.tsx", - "ui/src/pages/apps/app-detail/AgentConnectionAccess.tsx", - "ui/src/pages/apps/app-detail/BrowserUseSettingsPanel.tsx", - "ui/src/pages/apps/app-detail/ConnectedAggregatorApps.tsx", - "ui/src/pages/apps/app-detail/IdentitiesSection.tsx", - "ui/src/pages/apps/app-detail/PermissionsPanel.tsx", - "ui/src/pages/apps/app-detail/RailwayAccessPanel.tsx", - "ui/src/pages/apps/app-detail/ReviewPanel.tsx", - "ui/src/pages/apps/app-detail/SetupPanel.tsx", - "ui/src/pages/apps/connection-owner.tsx" - ] - }, - { - "id": "chat-channels", - "title": "Chat and email channel setup", - "status": "partial", - "features": [ - "chat-channels.md", - "connection-setup.md", - "questions-and-approvals.md", - "steering.md" - ], - "gap": "Shared recipes name provider checks; each provider transport/thread/identity/file-size/type combination needs separate live evidence and deeper instructions.", - "paths": [ - "ui/src/pages/apps/chat/ChatCommunicationInstructions.tsx", - "ui/src/pages/apps/chat/ChatEndpointDetail.tsx", - "ui/src/pages/apps/chat/ChatEndpointSetup.tsx", - "ui/src/pages/apps/chat/ChatIdentityConfirm.tsx", - "ui/src/pages/apps/chat/EmailEndpointSetup.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/GitHubSetupPrompt.tsx", - "ui/src/pages/apps/chat/PhotonConnectStep.tsx", - "ui/src/pages/apps/chat/SetupPrompt.tsx", - "ui/src/pages/apps/chat/SlackAvatarStep.tsx", - "ui/src/pages/apps/chat/SlackIdentityStep.tsx", - "ui/src/pages/apps/chat/SlackSetupPrompt.tsx", - "ui/src/pages/apps/chat/SlackToolSettings.tsx" - ] - }, - { - "id": "skills-and-teams", - "title": "Skills, Skill Studio, and teams", - "status": "partial", - "features": [ - "skills.md", - "teams.md", - "questions-and-approvals.md" - ], - "gap": "Main library/Studio/source/policy and CLI team-install paths are mapped. Full source-provider conflicts, harness sync, and remote package variants remain; catalog UI is not a current top-level route.", - "paths": [ - "ui/src/pages/CompanySkills.production.tsx", - "ui/src/pages/CompanySkills.tsx", - "ui/src/pages/SkillSources.tsx", - "ui/src/pages/SkillStudio.tsx", - "ui/src/pages/TeamCatalog.tsx", - "ui/src/pages/agent-skills/AgentSkillReleasePicker.tsx", - "ui/src/pages/agent-skills/AgentSkillRow.tsx", - "ui/src/pages/agent-skills/AgentSkillsTab.tsx", - "ui/src/pages/skills/ImportSkillsFromProjectDialog.tsx", - "ui/src/pages/skills/SkillImportProgress.tsx", - "ui/src/pages/skills/SkillPackagePreview.tsx", - "ui/src/pages/skills/SkillSourceTree.tsx" - ] - }, - { - "id": "projects-and-workspaces", - "title": "Projects and execution workspaces", - "status": "partial", - "features": [ - "projects.md", - "workspaces.md", - "goals.md", - "execution-environments.md", - "budgets-costs.md", - "recovery.md" - ], - "gap": "Provider-specific provisioning, multi-repository/submodule edge cases, Git reconciliation variants, and all service exposure combinations require deeper recipes.", - "paths": [ - "ui/src/pages/ExecutionWorkspaceDetail.tsx", - "ui/src/pages/ProjectDetail.tsx", - "ui/src/pages/ProjectWorkspaceDetail.tsx", - "ui/src/pages/Projects.tsx", - "ui/src/pages/Workspaces.tsx" - ] - }, - { - "id": "formal-approvals", - "title": "Formal governance approvals", - "status": "partial", - "features": [ - "questions-and-approvals.md", - "task-coordination.md", - "agents.md" - ], - "gap": "Formal board decisions and signoff have recipes; every approval payload/type and actor/host error permutation is not enumerated.", - "paths": [ - "ui/src/pages/ApprovalDetail.tsx", - "ui/src/pages/Approvals.tsx" - ] - }, - { - "id": "auth-and-access", - "title": "Login, invitations, and access", - "status": "partial", - "features": [ - "onboarding.md", - "access.md", - "navigation-preferences.md", - "cli-operations.md" - ], - "gap": "Deployment modes and core login/invite/member/token paths are mapped; exhaustive identity-provider, expiry, role, and resource-policy combinations remain.", - "paths": [ - "ui/src/pages/Auth.tsx", - "ui/src/pages/BoardClaim.tsx", - "ui/src/pages/CliAuth.tsx", - "ui/src/pages/CompanyAccess.tsx", - "ui/src/pages/InstanceAccess.tsx", - "ui/src/pages/InviteLanding.tsx", - "ui/src/pages/JoinRequestQueue.tsx", - "ui/src/pages/UserProfile.tsx" - ] - }, - { - "id": "company-and-instance", - "title": "Company and instance administration", - "status": "partial", - "features": [ - "companies.md", - "onboarding.md", - "instance-operations.md", - "execution-environments.md", - "navigation-preferences.md" - ], - "gap": "Core administration/import/export/operator workflows are mapped; cloud/self-hosted differences, migration/restore compatibility, and platform-specific service variants need deeper recipes.", - "paths": [ - "ui/src/pages/Companies.tsx", - "ui/src/pages/CompanyEnvironments.tsx", - "ui/src/pages/CompanyExport.tsx", - "ui/src/pages/CompanyImport.tsx", - "ui/src/pages/CompanySettings.tsx", - "ui/src/pages/InstanceExperimentalSettings.tsx", - "ui/src/pages/InstanceGeneralSettings.tsx", - "ui/src/pages/ProfileSettings.tsx" - ] - }, - { - "id": "goals-costs-and-activity", - "title": "Goals, dashboards, costs, and activity", - "status": "partial", - "features": [ - "goals.md", - "budgets-costs.md", - "activity.md", - "runs-adapters.md", - "routines.md" - ], - "gap": "Core goal/report/budget/audit journeys are mapped. Every aggregation/filter combination, cost source, and overlapping budget window still needs dedicated cases.", - "paths": [ - "ui/src/pages/Costs.production.tsx", - "ui/src/pages/Costs.tsx", - "ui/src/pages/Dashboard.tsx", - "ui/src/pages/DashboardLive.tsx", - "ui/src/pages/GoalDetail.tsx", - "ui/src/pages/Goals.tsx", - "ui/src/pages/Timeline.tsx", - "ui/src/pages/audit/AuditFeed.production.tsx", - "ui/src/pages/audit/AuditFeed.tsx", - "ui/src/pages/audit/AuditHub.tsx", - "ui/src/pages/audit/AuditRuns.tsx", - "ui/src/pages/audit/CompanyActivity.production.tsx", - "ui/src/pages/audit/CompanyActivity.tsx", - "ui/src/pages/audit/RoutineAuditActivity.tsx" - ] - }, - { - "id": "artifacts", - "title": "Artifacts and work products", - "status": "partial", - "features": [ - "documents-artifacts.md" - ], - "gap": "Document/attachment/library/work-product journeys are mapped; every media preview type, storage backend, annotation conflict, and runtime-resource lifecycle variant remains separate.", - "paths": [ - "ui/src/pages/Artifacts.tsx" - ] - }, - { - "id": "routines-and-pipelines", - "title": "Routines, pipelines, cases, and status cards", - "status": "partial", - "features": [ - "routines.md", - "pipelines.md", - "cases.md", - "status-cards.md" - ], - "gap": "All four capabilities have recipes. Trigger/provider/timezone combinations, custom case schemas, stage automation types, and summarizer quality need deeper cases.", - "paths": [ - "ui/src/pages/CaseDetail.tsx", - "ui/src/pages/Cases.tsx", - "ui/src/pages/PipelineSettings.tsx", - "ui/src/pages/Pipelines.tsx", - "ui/src/pages/RoutineDetail.production.tsx", - "ui/src/pages/RoutineDetail.tsx", - "ui/src/pages/Routines.production.tsx", - "ui/src/pages/Routines.tsx", - "ui/src/pages/StatusCards/ArchivedStatusCardRow.tsx", - "ui/src/pages/StatusCards/CreateStatusCardDialog.tsx", - "ui/src/pages/StatusCards/StatusCardDetailDrawer.tsx", - "ui/src/pages/StatusCards/StatusCardSettingsForm.tsx", - "ui/src/pages/StatusCards/StatusCardTile.tsx", - "ui/src/pages/StatusCards/SummarizerAgentSelect.tsx", - "ui/src/pages/StatusCards/index.tsx" - ] - }, - { - "id": "secrets", - "title": "Secrets and secret proposals", - "status": "partial", - "features": [ - "secrets.md", - "access.md", - "app-permissions.md" - ], - "gap": "Company/user/proposal/vault and runtime-binding paths are mapped; every secret provider, rotation scenario, and delivery context needs separate validation.", - "paths": [ - "ui/src/pages/Secrets.tsx", - "ui/src/pages/secrets/ImportFromVaultDialog.tsx", - "ui/src/pages/secrets/MissingUserSecretsBanner.tsx", - "ui/src/pages/secrets/MyUserSecretsTab.tsx", - "ui/src/pages/secrets/ProposalsTab.tsx", - "ui/src/pages/secrets/SecretPathName.tsx", - "ui/src/pages/secrets/SetMyUserSecretDialog.tsx", - "ui/src/pages/secrets/UserSecretDefinitionsTab.tsx", - "ui/src/pages/secrets/proposal-review.tsx", - "ui/src/pages/secrets/user-secret-presentation.tsx" - ] - }, - { - "id": "plugins-and-tools", - "title": "Plugins, gateways, and tool profiles", - "status": "partial", - "features": [ - "plugins.md", - "gateways-profiles.md", - "app-permissions.md", - "execution-environments.md" - ], - "gap": "Host plugin/gateway/profile lifecycles are mapped. Third-party plugin behaviors and every client transport/provider combination are outside host-wide coverage.", - "paths": [ - "ui/src/pages/CompanySettingsPluginPage.tsx", - "ui/src/pages/PluginManager.tsx", - "ui/src/pages/PluginPage.tsx", - "ui/src/pages/PluginSettings.tsx", - "ui/src/pages/apps/gateways/ConnectClientDialog.tsx", - "ui/src/pages/apps/gateways/CopyableGatewayUrl.tsx", - "ui/src/pages/apps/gateways/EditGatewayDialog.tsx", - "ui/src/pages/apps/gateways/GatewayDetail.tsx", - "ui/src/pages/apps/gateways/GatewaysList.tsx", - "ui/src/pages/apps/gateways/NewGatewayDialog.tsx", - "ui/src/pages/apps/gateways/panels/AppsToolsPanel.tsx", - "ui/src/pages/apps/gateways/panels/GatewayActivityPanel.tsx", - "ui/src/pages/apps/gateways/panels/GatewayAdvancedPanel.tsx", - "ui/src/pages/apps/gateways/panels/OverviewPanel.tsx", - "ui/src/pages/apps/gateways/panels/TokensPanel.tsx", - "ui/src/pages/tools/AdvancedToolsRoute.tsx", - "ui/src/pages/tools/AuditTab.tsx", - "ui/src/pages/tools/GatewaysTab.tsx", - "ui/src/pages/tools/McpConfigHelpDialog.tsx", - "ui/src/pages/tools/PasteConfigTab.tsx", - "ui/src/pages/tools/ProfilesTab.tsx", - "ui/src/pages/tools/SmokeLabTab.tsx", - "ui/src/pages/tools/ToolsAccess.tsx", - "ui/src/pages/tools/connection-dialogs.tsx", - "ui/src/pages/tools/profiles/ProfileActionDialog.tsx", - "ui/src/pages/tools/profiles/ProfileDetail.tsx", - "ui/src/pages/tools/profiles/ProfileDetailRoute.tsx", - "ui/src/pages/tools/profiles/ProfileWizard.tsx", - "ui/src/pages/tools/profiles/ProfileWizardRoute.tsx", - "ui/src/pages/tools/profiles/ProfilesIndex.tsx", - "ui/src/pages/tools/profiles/ToolsAdminGate.tsx", - "ui/src/pages/tools/profiles/WizardToolsStep.tsx", - "ui/src/pages/tools/shared.tsx" - ] - }, - { - "id": "labs-and-fallbacks", - "title": "Developer labs and fallback pages", - "status": "partial", - "features": [ - "developer-labs.md", - "navigation-preferences.md" - ], - "gap": "Developer and fallback surfaces are identified. Each synthetic fixture and performance budget is not a production journey and needs its own measurement.", - "paths": [ - "ui/src/pages/BootstrapSetupUxLab.tsx", - "ui/src/pages/CrossIssueCollaborationUxLab.tsx", - "ui/src/pages/DesignGuide.tsx", - "ui/src/pages/InviteUxLab.tsx", - "ui/src/pages/IssueChatLongThreadPerf.tsx", - "ui/src/pages/IssueChatUxLab.tsx", - "ui/src/pages/NotFound.tsx", - "ui/src/pages/ResponsibleUserDenialUxLab.tsx", - "ui/src/pages/RunTranscriptUxLab.tsx", - "ui/src/pages/SystemNoticeUxLab.tsx", - "ui/src/pages/TaskChatLab.tsx" - ] - } - ] -} diff --git a/maps/feature-map/developer-labs.md b/maps/feature-map/developer-labs.md index f2cdeb607d1..70f027621f9 100644 --- a/maps/feature-map/developer-labs.md +++ b/maps/feature-map/developer-labs.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Contributor surfaces","sectionOrder":80,"order":10} +--- + # Developer previews and diagnostic labs Contributors can inspect design examples, interaction labs, and performance fixtures. These are development surfaces and do not count as production feature verification. @@ -48,3 +52,23 @@ real-task behavior before extrapolating fixture measurements. - Intended developer use is not a universal runtime gate: Design Guide and global lab/performance routes are also registered in production builds. - Screenshots of a lab do not prove live provider behavior, persistence, or authorization. + +### Storybook verification + +#### `performance` + +Scope: browser +Storybook: A screenshot/story is optional context, not the required performance evidence. +Production: Use existing browser performance harnesses. Record build/browser/data size, timing/trace and scrolling. Long-thread fixture has a disabled composer; task-chat HTML harness uses a plain textarea and simulated updates. +Sources: Source: [IssueChatLongThreadPerf.tsx](../../ui/src/pages/IssueChatLongThreadPerf.tsx), [README.md](../../tests/perf/task-chat/README.md), [README.md](../../tests/perf/issue-detail/README.md). Tests: [scrollback.spec.ts](../../tests/perf/task-chat/scrollback.spec.ts), [issue-detail.perf.spec.ts](../../tests/perf/issue-detail/issue-detail.perf.spec.ts) + +#### `route-gates` + +Scope: browser +Storybook: No isolated story required to prove actual route registration, redirects or gates; isolated gated-control examples remain useful. +Production: Drive real routes under their actual development, experimental, production and fallback settings. Do not assume every lab is dev-only: global long-thread/lab/design routes also exist in production registration. +Sources: Source: [App.tsx](../../ui/src/App.tsx). Tests: No dedicated test asserted; use the feature recipe. + +### Documentation scope: Developer labs and fallback pages + +Developer and fallback surfaces are identified. Each synthetic fixture and performance budget is not a production journey and needs its own measurement. diff --git a/maps/feature-map/documents-artifacts.md b/maps/feature-map/documents-artifacts.md index c3ae6f1c3cd..37be4f67dc4 100644 --- a/maps/feature-map/documents-artifacts.md +++ b/maps/feature-map/documents-artifacts.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Tasks and conversations","sectionOrder":20,"order":70} +--- + # Documents, attachments, and work products People read and revise task documents, annotate specific content, open attached files, and inspect the outputs an agent hands back. The artifact library provides another route to the same work. @@ -64,3 +68,16 @@ Manual: Find the task’s output through search and grouping, open its stack, pa - A local path is not automatically an uploaded artifact accessible to another user. - A preview screenshot is not proof that download bytes or revision references are correct. - Version conflicts and stale annotations must stay visible rather than silently targeting different content. + +### Storybook verification + +#### `documents` + +Scope: ui +Storybook: Writable/read-only document, save pending/failure/conflict, revision history/historical preview and restore confirmation. +Production: Persist edited body and reload; append-only restore creates new revision; reject stale writes and inaccessible company/task. +Sources: Source: [IssueDocumentsSection.tsx](../../ui/src/components/IssueDocumentsSection.tsx), [TaskDocumentPanel.tsx](../../ui/src/components/task-side-panel/TaskDocumentPanel.tsx), [documents.ts](../../server/src/services/documents.ts). Tests: [IssueDocumentsSection.test.tsx](../../ui/src/components/IssueDocumentsSection.test.tsx), [document-revisions.test.ts](../../ui/src/lib/document-revisions.test.ts), [documents-service.test.ts](../../server/src/__tests__/documents-service.test.ts), [issue-document-restore-routes.test.ts](../../server/src/__tests__/issue-document-restore-routes.test.ts) + +### Documentation scope: Artifacts and work products + +Document/attachment/library/work-product journeys are mapped; every media preview type, storage backend, annotation conflict, and runtime-resource lifecycle variant remains separate. diff --git a/maps/feature-map/execution-environments.md b/maps/feature-map/execution-environments.md index dda710a1d89..00d59b7dcb8 100644 --- a/maps/feature-map/execution-environments.md +++ b/maps/feature-map/execution-environments.md @@ -1,4 +1,8 @@ -# Local, SSH, and sandbox environments +--- +navigation: {"section":"Projects and execution","sectionOrder":40,"order":40} +--- + +# Execution environments Operators configure where agents execute, probe readiness, select an environment for work, and inspect remote provisioning or custom-image state when the installed provider supports it. @@ -82,3 +86,33 @@ Manual: Run a bounded command in the intended target, inspect its output and wor harness; the selected native runtime still needs its own setup and useful-task proof. - The local option may appear only when editing an existing local environment; availability follows current UI/provider capabilities. - Workspace service reachability and environment reachability are separate checks. + +### Storybook verification + +#### `configuration` + +Scope: ui +Storybook: Local/SSH/sandbox editors; unavailable providers, missing credentials, save pending/error and restricted operator. +Production: Persist target configuration and enforce instance-admin/local-operator mutation boundary; target catalog is instance-scoped. +Sources: Source: [CompanyEnvironments.tsx](../../ui/src/pages/CompanyEnvironments.tsx), [environments.ts](../../server/src/routes/environments.ts). Tests: [CompanyEnvironments.test.tsx](../../ui/src/pages/CompanyEnvironments.test.tsx), [environment-service.test.ts](../../server/src/__tests__/environment-service.test.ts) + +#### `capabilities` + +Scope: ui +Storybook: Supported versus unavailable driver/provider controls and interactive-setup/template-capture limitations. +Production: Verify advertised driver/plugin capabilities match operations; unavailable provider cannot become working target; capability discovery must not allocate sandbox. +Sources: Source: [CompanyEnvironments.tsx](../../ui/src/pages/CompanyEnvironments.tsx), [environments.ts](../../ui/src/api/environments.ts). Tests: [environment-capability-contract.test.ts](../../server/src/__tests__/environment-capability-contract.test.ts), [environment-execution-target-capabilities.test.ts](../../server/src/__tests__/environment-execution-target-capabilities.test.ts), [plugin-environment-driver-sandbox-capabilities.test.ts](../../server/src/__tests__/plugin-environment-driver-sandbox-capabilities.test.ts) + +#### `probe` + +Scope: ui +Storybook: Remote Test pending, success, reachability/auth failure and platform qualification absent/invalidated notice. +Production: Probe actual owned target; verify selected saved immutable config/image/company qualification plus lease cleanup; local API probe proves host/cwd only and has no UI Test button. +Sources: Source: [CompanyEnvironments.tsx](../../ui/src/pages/CompanyEnvironments.tsx), [environment-probe.ts](../../server/src/services/environment-probe.ts). Tests: [CompanyEnvironments.test.tsx](../../ui/src/pages/CompanyEnvironments.test.tsx), [environment-probe.test.ts](../../server/src/__tests__/environment-probe.test.ts), [environment-live-ssh.test.ts](../../server/src/__tests__/environment-live-ssh.test.ts) + +#### `images` + +Scope: ui +Storybook: Custom-image setup/capture/progress, terminal connect/disconnect/failure, unsupported capability and active-image drift. +Production: Execute owned provider setup/capture/probe/terminal transport with correct saved image identity, authority, cleanup and shutdown; terminal screenshot cannot prove operation. +Sources: Source: [CompanyEnvironments.tsx](../../ui/src/pages/CompanyEnvironments.tsx), [environment-custom-images.ts](../../server/src/services/environment-custom-images.ts). Tests: [CompanyEnvironments.test.tsx](../../ui/src/pages/CompanyEnvironments.test.tsx), [environment-custom-images-service.test.ts](../../server/src/__tests__/environment-custom-images-service.test.ts) diff --git a/maps/feature-map/gateways-profiles.md b/maps/feature-map/gateways-profiles.md index de5f4b58e9d..2fc7eae8779 100644 --- a/maps/feature-map/gateways-profiles.md +++ b/maps/feature-map/gateways-profiles.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Apps, channels, and extensions","sectionOrder":50,"order":40} +--- + # Tool gateways and access profiles Administrators expose selected tools through gateways and reusable access profiles, connect clients, manage tokens, and inspect gateway activity. @@ -50,3 +54,12 @@ Manual: Create a bounded profile, choose its offered tools and options, save or - A copied endpoint is not proof of client authentication or tool discovery. - Gateway access cannot replace underlying connection/action permission checks. - Advanced tool routes require the appropriate admin gate; legacy tool URLs may redirect. + +### Storybook verification + +#### `tokens` + +Scope: ui +Storybook: Mount current TokensPanel with issue controls, once-only token reveal, expiry/actions, revocation confirmation and failures. Old GatewaysTab fixtures and assistant OAuth revocation are insufficient. +Production: Issue bounded token via POST /tool-gateway/gateways/{id}/tokens; call allowed and excluded tools; revoke via /tool-gateway/gateway-tokens/{id}/revoke and verify denial using same client. +Sources: Source: [TokensPanel.tsx](../../ui/src/pages/apps/gateways/panels/TokensPanel.tsx), [tool-gateway.ts](../../server/src/routes/tool-gateway.ts), [tools.ts](../../ui/src/api/tools.ts). Tests: [TokensPanel.test.tsx](../../ui/src/pages/apps/gateways/panels/TokensPanel.test.tsx), [tool-gateway-service.test.ts](../../server/src/__tests__/tool-gateway-service.test.ts), [tool-gateway.test.ts](../../server/src/__tests__/tool-gateway.test.ts) diff --git a/maps/feature-map/goals.md b/maps/feature-map/goals.md index 44322e7fbe3..e133ab5d112 100644 --- a/maps/feature-map/goals.md +++ b/maps/feature-map/goals.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Projects and execution","sectionOrder":40,"order":20} +--- + # Goals and work alignment People define company and lower-level goals and connect projects and tasks to the outcome they serve. @@ -47,3 +51,23 @@ Manual: Compare a task with an explicit goal to one relying on project context. - A goal status is not an independently measured proof of business success. - Do not infer a complete goal browser test from the small properties-toggle suite. + +### Storybook verification + +#### `alignment` + +Scope: ui +Storybook: Project/task goal selection, explicit/inherited context and invalid association error. +Production: Persist same-company valid association, reject invalid/cross-company reference, verify explicit versus inherited server context after reload. +Sources: Source: [ProjectProperties.tsx](../../ui/src/components/ProjectProperties.tsx), [GoalDetail.tsx](../../ui/src/pages/GoalDetail.tsx). Tests: [project-goal-validation.test.ts](../../server/src/__tests__/project-goal-validation.test.ts), [issues-goal-context-routes.test.ts](../../server/src/__tests__/issues-goal-context-routes.test.ts), [issue-goal-fallback.test.ts](../../server/src/__tests__/issue-goal-fallback.test.ts), [project-goal.test.ts](../../cli/src/__tests__/project-goal.test.ts) + +#### `navigation` + +Scope: ui +Storybook: Parent/child goal and project/task context links, empty/unavailable context and permitted destination. +Production: Follow actual goal/project/task records and compare explicit versus inherited context; ensure reload and inaccessible destination behavior. +Sources: Source: [GoalDetail.tsx](../../ui/src/pages/GoalDetail.tsx), [GoalProperties.tsx](../../ui/src/components/GoalProperties.tsx). Tests: [GoalDetail.test.tsx](../../ui/src/pages/GoalDetail.test.tsx), [issues-goal-context-routes.test.ts](../../server/src/__tests__/issues-goal-context-routes.test.ts), [issue-goal-fallback.test.ts](../../server/src/__tests__/issue-goal-fallback.test.ts) + +### Documentation scope: Goals, dashboards, costs, and activity + +Core goal/report/budget/audit journeys are mapped. Every aggregation/filter combination, cost source, and overlapping budget window still needs dedicated cases. diff --git a/maps/feature-map/inbox-search.md b/maps/feature-map/inbox-search.md index 4c5b60696b9..04d20711aed 100644 --- a/maps/feature-map/inbox-search.md +++ b/maps/feature-map/inbox-search.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Tasks and conversations","sectionOrder":20,"order":30} +--- + # Inbox, decisions, and search People find work that needs their attention, distinguish unread activity from required decisions, archive handled items, and search across the company. @@ -107,3 +111,19 @@ after switching company/account to verify suppression and isolation. - Personal archival is not task cancellation or completion. - Legacy Inbox routes can redirect to the combined task view; record which host actually rendered. - Search service tests do not establish the relevance quality of every query. + +### Storybook verification + +#### `views` + +Scope: ui +Storybook: Mine/Recent/Unread/Blocked and broader task views; combined versus standalone host; loading/empty/error/filter states. +Production: Use persisted personal participation/read data; verify scoped counts and list navigation/reload; automatic read cleanup must not create Mine membership. +Sources: Source: [Inbox.tsx](../../ui/src/pages/Inbox.tsx), [Issues.tsx](../../ui/src/pages/Issues.tsx). Tests: [Inbox.test.tsx](../../ui/src/pages/Inbox.test.tsx), [Issues.test.tsx](../../ui/src/pages/Issues.test.tsx), [issues-service.test.ts](../../server/src/__tests__/issues-service.test.ts) + +#### `toasts` + +Scope: ui +Storybook: Eligible live task toast, explicit mention, quiet unrelated event, own-action/visible-task suppression, dedupe and company/account switch. +Production: Persisted participation and mentions determine per-viewer socket eligibility; quiet events still refresh caches; reload retains eligibility, unauthorized resources remain denied. +Sources: Source: [ToastViewport.tsx](../../ui/src/components/ToastViewport.tsx), [ToastContext.tsx](../../ui/src/context/ToastContext.tsx), [LiveUpdatesProvider.tsx](../../ui/src/context/LiveUpdatesProvider.tsx), [task-toast-eligibility.ts](../../server/src/realtime/task-toast-eligibility.ts). Tests: [ToastContext.test.tsx](../../ui/src/context/ToastContext.test.tsx), [ToastViewport.test.tsx](../../ui/src/components/ToastViewport.test.tsx), [LiveUpdatesProvider.hook.test.tsx](../../ui/src/context/LiveUpdatesProvider.hook.test.tsx), [task-toast-eligibility.test.ts](../../server/src/__tests__/task-toast-eligibility.test.ts), [live-events-toast.test.ts](../../server/src/__tests__/live-events-toast.test.ts), [multi-user-authenticated.spec.ts](../../tests/e2e/multi-user-authenticated.spec.ts) diff --git a/maps/feature-map/instance-operations.md b/maps/feature-map/instance-operations.md index 75bfb8b046d..df83b1a8fde 100644 --- a/maps/feature-map/instance-operations.md +++ b/maps/feature-map/instance-operations.md @@ -1,4 +1,8 @@ -# Installation, configuration, updates, and backups +--- +navigation: {"section":"Oversight and operation","sectionOrder":70,"order":40} +--- + +# Instance operations An operator can install and run Paperclip, diagnose the instance, configure supported deployment settings, manage its service, and produce a recoverable database backup. @@ -56,3 +60,26 @@ Manual: Change a harmless experimental setting, reload, and confirm the affected - A successful backup write does not prove restoration works. - Settings visibility and mutability differ for cloud-managed and self-hosted instances. - Keep the three data paths distinct: first-party Telemetry, operator-configured OpenTelemetry, and local run logs. + +### Storybook verification + +#### `backup` + +Scope: ui +Storybook: Mount shipped InstanceGeneralSettings in CompanySettings with daily/weekly/monthly retention presets, selected values, saving/error/loading and cloud-hidden controls. Backup creation and restore remain separate CLI/operator checks. +Production: PATCH /api/instance/settings/general must enforce instance settings authority and managed hidden fields, persist retention and survive reload. Separately inspect a real backup and restore a known record into a second disposable target; a successful write does not prove restoration. +Sources: Source: [InstanceGeneralSettings.tsx](../../ui/src/pages/InstanceGeneralSettings.tsx), [CompanySettings.tsx](../../ui/src/pages/CompanySettings.tsx), [instance-settings.ts](../../server/src/routes/instance-settings.ts), [db-backup.ts](../../cli/src/commands/db-backup.ts). Tests: [InstanceGeneralSettings.test.tsx](../../ui/src/pages/InstanceGeneralSettings.test.tsx), [instance-settings-routes.test.ts](../../server/src/__tests__/instance-settings-routes.test.ts), [instance-settings-managed-overlay.test.ts](../../server/src/__tests__/instance-settings-managed-overlay.test.ts), [instance-database-backups-routes.test.ts](../../server/src/__tests__/instance-database-backups-routes.test.ts) + +#### `install-update` + +Scope: cli +Storybook: No authored story required for install, channel selection, update or rollback command execution. +Production: Use an owned managed installation: check/dry-run, installed version, retained payload rollback and failure. Source-checkout guidance is a separate case; rollback does not undo database migrations. +Sources: Source: [index.ts](../../cli/src/index.ts), [install.ts](../../cli/src/commands/install.ts), [update.ts](../../cli/src/commands/update.ts). Tests: [install-command.test.ts](../../cli/src/__tests__/install-command.test.ts), [update-command.test.ts](../../cli/src/__tests__/update-command.test.ts) + +#### `diagnostics` + +Scope: cli +Storybook: No authored story required for doctor/health command results. +Production: Run doctor against an owned data directory; check readiness and nonzero failures. A listening port alone does not prove readiness; repair requires observing the repaired result. +Sources: Source: [doctor.ts](../../cli/src/commands/doctor.ts). Tests: [doctor.test.ts](../../cli/src/__tests__/doctor.test.ts) diff --git a/maps/feature-map/navigation-preferences.md b/maps/feature-map/navigation-preferences.md index bb2490483c4..c12be921974 100644 --- a/maps/feature-map/navigation-preferences.md +++ b/maps/feature-map/navigation-preferences.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Oversight and operation","sectionOrder":70,"order":30} +--- + # Navigation, profile, and announcements People organize their sidebar, move between company resources, maintain their profile, and dismiss product announcements with the correct persistence and identity scope. @@ -50,3 +54,19 @@ Manual: Change a disposable user’s display details, reload, and inspect an att - Announcement dismissals are intentionally instance-wide user preferences, unlike company-scoped domain data. - Legacy/production shells need their own navigation check when affected. - A route redirect is part of the journey; do not document a removed screen as if it still renders. + +### Storybook verification + +#### `preferences` + +Scope: ui +Storybook: Mount Sidebar using real preference boundary with stars/order/collapse/recents state. Clearly distinguish in-memory section collapse, browser-local recents and server-saved stars/order. +Production: GET/PUT /sidebar-preferences/me and /companies/{id}/sidebar-preferences/me plus stars must retain intended user/company isolation across reload and switch. Section collapse reopens after reload; global collapse is disabled. +Sources: Source: [Sidebar.tsx](../../ui/src/components/Sidebar.tsx), [sidebar-preferences.ts](../../server/src/routes/sidebar-preferences.ts), [sidebar-preferences.ts](../../server/src/services/sidebar-preferences.ts). Tests: [Sidebar.test.tsx](../../ui/src/components/Sidebar.test.tsx), [sidebar-preferences-routes.test.ts](../../server/src/__tests__/sidebar-preferences-routes.test.ts) + +#### `fallbacks` + +Scope: browser +Storybook: A NotFound rendering story can help polish, but missing-resource/legacy-deep-link capability principally needs real App/router/browser scenarios preserving company and query intent. +Production: Cold-open invalid company/resource and retired URL; verify explicit fallback or correct canonical redirect without silently targeting a different resource/company. +Sources: Source: [NotFound.tsx](../../ui/src/pages/NotFound.tsx), [App.tsx](../../ui/src/App.tsx), [company-routes.ts](../../ui/src/lib/company-routes.ts). Tests: [App.activity-routing.test.tsx](../../ui/src/App.activity-routing.test.tsx), [App.cases-routing.test.tsx](../../ui/src/App.cases-routing.test.tsx), [App.test.tsx](../../ui/src/App.test.tsx), [company-routes.test.ts](../../ui/src/lib/company-routes.test.ts) diff --git a/maps/feature-map/onboarding.md b/maps/feature-map/onboarding.md index 0feadbd3f18..c7120011b86 100644 --- a/maps/feature-map/onboarding.md +++ b/maps/feature-map/onboarding.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Getting started and access","sectionOrder":10,"order":10} +--- + # Onboarding and first work An operator can start an instance, create a company, configure its first agent, and reach a real first task. Instance setup and company onboarding are separate steps. @@ -122,3 +126,23 @@ Manual: Run setup in the disposable directory, open the URL it prints, and confi - An empty company, an empty instance, and an unauthenticated browser are different states. - Creating an agent does not prove its provider login or first execution succeeded. - See [access](./access.md) for authenticated deployments and [agents](./agents.md) for later hiring. + +### Storybook verification + +#### `resume` + +Scope: ui +Storybook: Restored incomplete wizard; invalid or unauthorized saved company; temporarily withheld draft; account switch; storage failure. +Production: Reload company-prefixed onboarding without duplicating company; restore only authorized account/company draft and retain input after recoverable loading failure. +Sources: Source: [OnboardingWizard.tsx](../../ui/src/components/OnboardingWizard.tsx), [onboarding-state.ts](../../ui/src/lib/onboarding-state.ts). Tests: [OnboardingWizard.test.tsx](../../ui/src/components/OnboardingWizard.test.tsx), [onboarding-state.test.ts](../../ui/src/lib/onboarding-state.test.ts), [onboarding.spec.ts](../../tests/e2e/onboarding.spec.ts) + +#### `instance` + +Scope: cli +Storybook: No authored UI story required for host installation and startup. +Production: Configure isolated data directory, start instance, confirm printed URL/identity/health, restart with saved configuration. +Sources: Source: [onboard.ts](../../cli/src/commands/onboard.ts), [onboard-service.ts](../../cli/src/onboard-service.ts). Tests: [onboard.test.ts](../../cli/src/__tests__/onboard.test.ts), [onboard-service.test.ts](../../cli/src/__tests__/onboard-service.test.ts), [test-drive.test.ts](../../cli/src/__tests__/test-drive.test.ts) + +### Documentation scope: Login, invitations, and access + +Deployment modes and core login/invite/member/token paths are mapped; exhaustive identity-provider, expiry, role, and resource-policy combinations remain. diff --git a/maps/feature-map/pipelines.md b/maps/feature-map/pipelines.md index a8f7780796a..471d45fe003 100644 --- a/maps/feature-map/pipelines.md +++ b/maps/feature-map/pipelines.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Automation and structured work","sectionOrder":60,"order":20} +--- + # Pipelines, review queues, and learnings With the pipeline experiment enabled, people move structured work through configured stages, inspect stage automation, review outputs, and retain learning records. @@ -48,3 +52,33 @@ Manual: Open a pending review, inspect its source output and revision, accept or - These routes are experimental and may redirect or deny access when disabled. - ReviewQueue and Learnings are hosted from the pipeline module; a page-file inventory alone misses them. - Pipeline items and free-standing [cases](./cases.md) share records but have different navigation contexts. + +### Storybook verification + +#### `stages` + +Scope: ui +Storybook: Mount PipelineSettings ordered stages, automation assignees/env, invalid transitions, unsaved state, saving and failed save. +Production: POST/PATCH stages and PUT /pipelines/{id}/transitions must persist valid order/configuration, enforce ownership and reject invalid transitions; actual automation execution remains separate. +Sources: Source: [PipelineSettings.tsx](../../ui/src/pages/PipelineSettings.tsx), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [PipelineSettings.test.ts](../../ui/src/pages/PipelineSettings.test.ts), [pipelines-service.test.ts](../../server/src/__tests__/pipelines-service.test.ts), [pipelines-routes.test.ts](../../server/src/__tests__/pipelines-routes.test.ts) + +#### `items` + +Scope: ui +Storybook: Mount Pipelines/PipelineItemDetailView board grouping, item creation/details, stage/health/work references, empty/loading and failed transition. +Production: GET/POST /pipelines/{id}/cases and POST /cases/{id}/transition must maintain company scope, valid stage changes and linked work; fixture stage state does not prove automation. +Sources: Source: [Pipelines.tsx](../../ui/src/pages/Pipelines.tsx), [PipelineWorkReferences.tsx](../../ui/src/components/PipelineWorkReferences.tsx), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [Pipelines.test.tsx](../../ui/src/pages/Pipelines.test.tsx), [pipelines-service.test.ts](../../server/src/__tests__/pipelines-service.test.ts), [pipelines-routes.test.ts](../../server/src/__tests__/pipelines-routes.test.ts), [pipelines-tutorial-flow.spec.ts](../../tests/e2e/pipelines-tutorial-flow.spec.ts) + +#### `review` + +Scope: ui +Storybook: Mount ReviewQueue and item review pending output/revision, accept/reject/request-changes, bulk selection, stale/conflicting submission and errors. +Production: POST /cases/{id}/review and /companies/{id}/review-cases/bulk must authorize reviewer, persist correct outcome/transition and reject stale or invalid input. +Sources: Source: [Pipelines.tsx](../../ui/src/pages/Pipelines.tsx), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [Pipelines.test.tsx](../../ui/src/pages/Pipelines.test.tsx), [pipelines-routes.test.ts](../../server/src/__tests__/pipelines-routes.test.ts), [pipelines-service.test.ts](../../server/src/__tests__/pipelines-service.test.ts), [pipelines-tutorial-flow.spec.ts](../../tests/e2e/pipelines-tutorial-flow.spec.ts) + +#### `learnings` + +Scope: ui +Storybook: Mount actual Learnings export with filtered case events, review/forced-move entries, source links, empty/loading/error. This is event history, not a separately authored learning-record system. +Production: GET /companies/{id}/case-events in pipelines routes needs existing company/access contract tests; a rendered event cannot establish learning quality. +Sources: Source: [Pipelines.tsx](../../ui/src/pages/Pipelines.tsx), [pipeline-learnings.ts](../../ui/src/lib/pipeline-learnings.ts), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [Pipelines.test.tsx](../../ui/src/pages/Pipelines.test.tsx), [pipelines-routes.test.ts](../../server/src/__tests__/pipelines-routes.test.ts), [pipelines-service.test.ts](../../server/src/__tests__/pipelines-service.test.ts) diff --git a/maps/feature-map/plugins.md b/maps/feature-map/plugins.md index 839f2a5e26e..5126c080c3f 100644 --- a/maps/feature-map/plugins.md +++ b/maps/feature-map/plugins.md @@ -1,4 +1,8 @@ -# Plugins and contributed product surfaces +--- +navigation: {"section":"Apps, channels, and extensions","sectionOrder":50,"order":60} +--- + +# Plugins Operators install and configure plugins, inspect their status and errors, and use their contributed pages, tools, and managed resources within the plugin’s granted capabilities. @@ -49,3 +53,37 @@ Manual: Open the contributed page by navigation and cold deep link, perform a ha - Installing a plugin does not authorize every host capability or external action. - Plugin-provided routes are dynamic; this map covers the host lifecycle, not every third-party feature. - Environment-driver plugins also need the [environment](./execution-environments.md) checks. + +### Storybook verification + +#### `installation` + +Scope: ui +Storybook: Mount PluginManager trusted package and bundled-local choices, pending install, validation/recoverable error and installed status. +Production: POST /plugins/install on a disposable package; enforce instance install authority, trusted path/package validation and correct version. Package and local install are distinct. +Sources: Source: [PluginManager.tsx](../../ui/src/pages/PluginManager.tsx), [plugins.ts](../../server/src/routes/plugins.ts), [plugin-install-guard.ts](../../server/src/services/plugin-install-guard.ts). Tests: [plugin-install-route-security.test.ts](../../server/src/__tests__/plugin-install-route-security.test.ts), [plugin-install-autobuild.test.ts](../../server/src/__tests__/plugin-install-autobuild.test.ts), [plugin-routes-authz.test.ts](../../server/src/__tests__/plugin-routes-authz.test.ts) + +#### `configuration` + +Scope: ui +Storybook: Mount PluginSettings valid/invalid schema inputs, saved configuration, pending/failure and unavailable plugin. +Production: GET/POST /plugins/{id}/config and POST config/test must preserve validation/company scope and deliver saved config to real plugin worker/startup. +Sources: Source: [PluginSettings.tsx](../../ui/src/pages/PluginSettings.tsx), [plugins.ts](../../server/src/routes/plugins.ts), [plugin-config-validator.ts](../../server/src/services/plugin-config-validator.ts). Tests: [PluginSettings.test.tsx](../../ui/src/pages/PluginSettings.test.tsx), [plugin-config-startup-delivery.test.ts](../../server/src/__tests__/plugin-config-startup-delivery.test.ts), [plugin-routes-authz.test.ts](../../server/src/__tests__/plugin-routes-authz.test.ts) + +#### `contributions` + +Scope: ui +Storybook: Mount PluginPage and CompanySettingsPluginPage contributed routes/tabs, loading, missing/unavailable plugin and action failures with a known fixture plugin. +Production: Serve real static plugin UI; enforce bridge data/action host capabilities and company boundaries; exercise a harmless action and cold deep link. +Sources: Source: [PluginPage.tsx](../../ui/src/pages/PluginPage.tsx), [CompanySettingsPluginPage.tsx](../../ui/src/pages/CompanySettingsPluginPage.tsx), [plugins.ts](../../server/src/routes/plugins.ts), [plugin-ui-static.ts](../../server/src/routes/plugin-ui-static.ts). Tests: [PluginPage.test.tsx](../../ui/src/pages/PluginPage.test.tsx), [CompanySettingsPluginPage.test.tsx](../../ui/src/pages/CompanySettingsPluginPage.test.tsx), [plugin-ui-static.test.ts](../../server/src/__tests__/plugin-ui-static.test.ts), [plugin-tenant-isolation.test.ts](../../server/src/__tests__/plugin-tenant-isolation.test.ts) + +#### `lifecycle` + +Scope: ui +Storybook: Mount PluginManager active/disabled/uninstall/upgrade pending and failures; distinguish operator controls from developer watcher reload. +Production: POST enable/disable and DELETE /plugins/{id} must stop worker/tool/managed-resource activity and clean owned resources; verify disposable restart/uninstall and developer watcher separately. +Sources: Source: [PluginManager.tsx](../../ui/src/pages/PluginManager.tsx), [plugins.ts](../../server/src/routes/plugins.ts), [plugin-lifecycle.ts](../../server/src/services/plugin-lifecycle.ts), [plugin-dev-watcher.ts](../../server/src/services/plugin-dev-watcher.ts). Tests: [plugin-lifecycle-restart.test.ts](../../server/src/__tests__/plugin-lifecycle-restart.test.ts), [plugin-routes-authz.test.ts](../../server/src/__tests__/plugin-routes-authz.test.ts), [plugin-dev-watcher.test.ts](../../server/src/__tests__/plugin-dev-watcher.test.ts) + +### Documentation scope: Plugins, gateways, and tool profiles + +Host plugin/gateway/profile lifecycles are mapped. Third-party plugin behaviors and every client transport/provider combination are outside host-wide coverage. diff --git a/maps/feature-map/projects.md b/maps/feature-map/projects.md index 0ed3470073f..6e4d042cc8d 100644 --- a/maps/feature-map/projects.md +++ b/maps/feature-map/projects.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Projects and execution","sectionOrder":40,"order":10} +--- + # Projects and repositories People group tasks into projects, attach goals and repositories, and configure the context and defaults used by project work. @@ -51,3 +55,7 @@ Manual: Attach a small repository, save, and create a project task. Inspect the - Project repository configuration and a provisioned execution workspace are different records. - See [workspaces](./workspaces.md), [goals](./goals.md), and [budgets](./budgets-costs.md) for those features. - Do not assume a deleted or archived project should erase its historical task evidence. + +### Documentation scope: Projects and execution workspaces + +Provider-specific provisioning, multi-repository/submodule edge cases, Git reconciliation variants, and all service exposure combinations require deeper recipes. diff --git a/maps/feature-map/questions-and-approvals.md b/maps/feature-map/questions-and-approvals.md index 4ecf303f2aa..a1331c32574 100644 --- a/maps/feature-map/questions-and-approvals.md +++ b/maps/feature-map/questions-and-approvals.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Tasks and conversations","sectionOrder":20,"order":50} +--- + # Questions and approvals People answer an agent's questions and decide requests without losing the task's @@ -182,3 +186,7 @@ unless its actual provider journey was driven. sharing UI. A watchdog cannot acquire board authority by resolving a card. - An answer to an old question can queue behind a successor run; it does not automatically steer that run. See [steering](./steering.md). + +### Documentation scope: Formal governance approvals + +Formal board decisions and signoff have recipes; every approval payload/type and actor/host error permutation is not enumerated. diff --git a/maps/feature-map/recovery.md b/maps/feature-map/recovery.md index 7e7c1ab34f8..c21609715b9 100644 --- a/maps/feature-map/recovery.md +++ b/maps/feature-map/recovery.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Projects and execution","sectionOrder":40,"order":50} +--- + # Recovery People can see why a task stopped, who owns the next action, and whether a safe @@ -205,3 +209,26 @@ only. Separately inspect the underlying execution if it is still stuck. restart continuity. Use the appropriate runtime suite for that claim. - See [execution semantics](../../doc/execution-semantics.md) for the governing recovery contract and [steering](./steering.md) for saved follow-ups. + +### Storybook verification + +#### `exhaustion` + +Scope: ui +Storybook: Exhausted/overdue attempts, operator retry pending/error, blocked authority/gate and specific escalation. +Production: Inspect durable attempt bounds and actual eligible retry/repair; acknowledgment alone does not prove continued execution. +Sources: Source: [IssueRecoveryActionCard.tsx](../../ui/src/components/IssueRecoveryActionCard.tsx), [DispositionRecoveryNotice.tsx](../../ui/src/components/DispositionRecoveryNotice.tsx), [issue-recovery-actions.ts](../../server/src/services/issue-recovery-actions.ts). Tests: [IssueRecoveryActionCard.test.tsx](../../ui/src/components/IssueRecoveryActionCard.test.tsx), [DispositionRecoveryNotice.test.tsx](../../ui/src/components/DispositionRecoveryNotice.test.tsx), [issue-recovery-actions.test.ts](../../server/src/__tests__/issue-recovery-actions.test.ts), [recovery.spec.ts](../../tests/e2e/execution-recovery/recovery.spec.ts) + +#### `unknown-outcome` + +Scope: ui +Storybook: Uncertain external outcome, required inspection/evidence and explicit permitted operator decision. +Production: Corroborate provider outcome before authorization; enforce no automatic external side-effect replay and reject stale/unauthorized decisions. +Sources: Source: [IssueRecoveryActionCard.tsx](../../ui/src/components/IssueRecoveryActionCard.tsx), [issue-recovery-actions.ts](../../server/src/services/issue-recovery-actions.ts). Tests: [IssueRecoveryActionCard.test.tsx](../../ui/src/components/IssueRecoveryActionCard.test.tsx), [issue-recovery-actions.test.ts](../../server/src/__tests__/issue-recovery-actions.test.ts), [recovery.spec.ts](../../tests/e2e/execution-recovery/recovery.spec.ts) + +#### `user-continuation` + +Scope: ui +Storybook: Saved follow-up waiting on stop cleanup, pause/budget gate, one eligible continuation and result/failure. +Production: Confirm previous execution stopped before delivery, preserve message, avoid duplicate wakes and honor actual task/ancestor/budget gate in separate legacy/native paths. +Sources: Source: [TaskChatQueuedMessages.tsx](../../ui/src/components/task-chat/TaskChatQueuedMessages.tsx), [legacy-continuation.ts](../../server/src/services/recovery/legacy-continuation.ts), [native-restart-recovery.ts](../../server/src/services/native-runtime/native-restart-recovery.ts). Tests: [legacy-continuation.test.ts](../../server/src/services/recovery/legacy-continuation.test.ts), [native-restart-recovery.test.ts](../../server/src/services/native-runtime/native-restart-recovery.test.ts), [issue-queued-comments-routes.test.ts](../../server/src/__tests__/issue-queued-comments-routes.test.ts), [legacy-failure-continuation.spec.ts](../../tests/e2e/legacy-failure-continuation.spec.ts) diff --git a/maps/feature-map/routines.md b/maps/feature-map/routines.md index 621fd21bca6..9a85ac2062d 100644 --- a/maps/feature-map/routines.md +++ b/maps/feature-map/routines.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Automation and structured work","sectionOrder":60,"order":10} +--- + # Routines, schedules, and triggers Operators define repeatable work, configure its inputs and triggers, run it on demand or automatically, and inspect the execution history and resulting tasks. @@ -51,3 +55,16 @@ Manual: Set a near-term disposable schedule or authorized test webhook, verify o - Saving a schedule does not prove the scheduler invoked it. - Timezone, overlap/concurrency rules, and plugin ownership affect behavior. - A routine run’s task must still respect pause, access, and budget gates. + +### Storybook verification + +#### `run-now` + +Scope: ui +Storybook: Mount RoutineRunVariablesDialog through actual RoutineDetail with required/default inputs, project/workspace overrides, pending, blocked and failed submission. RunButton-only no-op examples do not supply/run inputs. +Production: POST /routines/{id}/run must validate variables, create one attributed execution/task and obey pause/access/budget gates; inspect actual task outcome separately. +Sources: Source: [RoutineRunVariablesDialog.tsx](../../ui/src/components/RoutineRunVariablesDialog.tsx), [RoutineDetail.tsx](../../ui/src/pages/RoutineDetail.tsx), [routines.ts](../../server/src/routes/routines.ts). Tests: [RoutineRunVariablesDialog.test.tsx](../../ui/src/components/RoutineRunVariablesDialog.test.tsx), [routines-service.test.ts](../../server/src/__tests__/routines-service.test.ts), [routines-e2e.test.ts](../../server/src/__tests__/routines-e2e.test.ts) + +### Documentation scope: Routines, pipelines, cases, and status cards + +All four capabilities have recipes. Trigger/provider/timezone combinations, custom case schemas, stage automation types, and summarizer quality need deeper cases. diff --git a/maps/feature-map/runs-adapters.md b/maps/feature-map/runs-adapters.md index 321b0eefe68..8e4109770c8 100644 --- a/maps/feature-map/runs-adapters.md +++ b/maps/feature-map/runs-adapters.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Agents and reusable capabilities","sectionOrder":30,"order":20} +--- + # Runs, harnesses, and model accounts Operators choose an agent harness and model account, inspect execution history and transcripts, and distinguish a working configuration from a successful task result. diff --git a/maps/feature-map/secrets.md b/maps/feature-map/secrets.md index 68658519cd9..3b44fae6615 100644 --- a/maps/feature-map/secrets.md +++ b/maps/feature-map/secrets.md @@ -1,4 +1,8 @@ -# Secrets, personal credentials, and proposals +--- +navigation: {"section":"Apps, channels, and extensions","sectionOrder":50,"order":50} +--- + +# Secrets and proposals Operators manage company secret references, users supply their own credentials where required, and reviewers decide proposed secret changes without exposing secret values in ordinary UI evidence. @@ -49,3 +53,16 @@ Manual: Review a dummy proposal, reject one and accept another, then inspect the - A displayed reference name is not proof that the actor can resolve its value at runtime. - Company secrets and user-specific values have different ownership. - Redaction needs verification in errors, activity, and run logs as well as the form. + +### Storybook verification + +#### `proposals` + +Scope: ui +Storybook: Mount ProposalsTab pending secret/binding proposals, blocked authority, expired/resolved proposal, approval/rejection pending/error, and redacted metadata. +Production: GET /companies/{id}/secret-proposals and POST approve/reject must enforce company/admin/target authority, durable resolution and redaction; verified run-bound agent proposal creation is separate. +Sources: Source: [ProposalsTab.tsx](../../ui/src/pages/secrets/ProposalsTab.tsx), [secrets.ts](../../server/src/routes/secrets.ts), [secret-proposal-authorization.ts](../../server/src/services/secret-proposal-authorization.ts). Tests: [ProposalsTab.render.test.tsx](../../ui/src/pages/secrets/ProposalsTab.render.test.tsx), [secret-proposals-routes.test.ts](../../server/src/__tests__/secret-proposals-routes.test.ts) + +### Documentation scope: Secrets and secret proposals + +Company/user/proposal/vault and runtime-binding paths are mapped; every secret provider, rotation scenario, and delivery context needs separate validation. diff --git a/maps/feature-map/skills.md b/maps/feature-map/skills.md index 4085f690090..276bbcbbcbf 100644 --- a/maps/feature-map/skills.md +++ b/maps/feature-map/skills.md @@ -1,4 +1,8 @@ -# Skill discovery, authoring, and policy +--- +navigation: {"section":"Agents and reusable capabilities","sectionOrder":30,"order":30} +--- + +# Skills and Skill Studio Operators discover or import skills, author and test them in Skill Studio, manage source versions, and decide which agents may use them. @@ -61,3 +65,16 @@ Manual: Enable the skill for one test agent and leave another without access. Ru - Installed does not mean enabled for every agent. - Read-only GitHub/bundled skills may require a writable copy rather than an in-place edit. - Studio interaction coverage is in [questions and approvals](./questions-and-approvals.md); a passing mock is not a live harness test. + +### Storybook verification + +#### `testing` + +Scope: ui +Storybook: Studio test inputs/configuration, running, question/approval, result and failed test states. +Production: Run bounded test of actual saved version with correct selected account/environment; inspect persisted test detail and eligible interaction response. +Sources: Source: [SkillStudio.tsx](../../ui/src/pages/SkillStudio.tsx), [companySkills.ts](../../ui/src/api/companySkills.ts). Tests: [SkillStudio.test.tsx](../../ui/src/pages/SkillStudio.test.tsx), [company-skill-test-runs-service.test.ts](../../server/src/__tests__/company-skill-test-runs-service.test.ts) + +### Documentation scope: Skills, Skill Studio, and teams + +Main library/Studio/source/policy and CLI team-install paths are mapped. Full source-provider conflicts, harness sync, and remote package variants remain; catalog UI is not a current top-level route. diff --git a/maps/feature-map/status-cards.md b/maps/feature-map/status-cards.md index c91082da6b6..395215d442a 100644 --- a/maps/feature-map/status-cards.md +++ b/maps/feature-map/status-cards.md @@ -1,4 +1,8 @@ -# Status cards and refreshed summaries +--- +navigation: {"section":"Automation and structured work","sectionOrder":60,"order":40} +--- + +# Status cards The status-card experiment turns a saved prompt/query into an inspectable summary of watched work, with refresh history, configuration, and archive/restore controls. @@ -44,3 +48,33 @@ Manual: Change a disposable card’s prompt or summarizer, run the offered rebui - Summary quality needs comparison against source work, not just a successful task status. - A saved old summary must not be counted as a successful new refresh. - Experimental visibility, author permissions, and agent ownership constrain mutation. + +### Storybook verification + +#### `authoring` + +Scope: ui +Storybook: Mount CreateStatusCardDialog and StatusCardSettingsForm prompt, summarizer, refresh options, required/invalid inputs and save errors. +Production: POST /companies/{id}/status-cards and PATCH /status-cards/{id} must enforce gate/author authority, save configuration and start expected compile task when prompt changes. +Sources: Source: [CreateStatusCardDialog.tsx](../../ui/src/pages/StatusCards/CreateStatusCardDialog.tsx), [StatusCardSettingsForm.tsx](../../ui/src/pages/StatusCards/StatusCardSettingsForm.tsx), [status-cards.ts](../../server/src/routes/status-cards.ts). Tests: [StatusCardSettingsForm.test.tsx](../../ui/src/pages/StatusCards/StatusCardSettingsForm.test.tsx), [status-cards.test.ts](../../server/src/__tests__/status-cards.test.ts) + +#### `generation` + +Scope: ui +Storybook: Mount card tile/drawer compiling, refreshing, failed, stale existing summary and successful new-summary states with linked task. +Production: POST /status-cards/{id}/recompile and /refresh plus update/finalization engine must persist actual new output/history; compare saved summary with source tasks, not merely successful task status. +Sources: Source: [StatusCardTile.tsx](../../ui/src/pages/StatusCards/StatusCardTile.tsx), [StatusCardDetailDrawer.tsx](../../ui/src/pages/StatusCards/StatusCardDetailDrawer.tsx), [status-cards.ts](../../server/src/routes/status-cards.ts), [status-card-update-engine.ts](../../server/src/services/status-card-update-engine.ts). Tests: [StatusCardTile.test.tsx](../../ui/src/pages/StatusCards/StatusCardTile.test.tsx), [status-cards.test.ts](../../server/src/__tests__/status-cards.test.ts), [status-card-update-engine.test.ts](../../server/src/__tests__/status-card-update-engine.test.ts) + +#### `inspection` + +Scope: ui +Storybook: Mount StatusCardDetailDrawer summary, watched work, update/revision history, query debug, empty/loading/error and stale summary disclosure. +Production: GET /status-cards/{id}, /updates, /summary-revisions and /dry-run must filter accessible card/source records; fixtures cannot establish summary truth or query authorization. +Sources: Source: [StatusCardDetailDrawer.tsx](../../ui/src/pages/StatusCards/StatusCardDetailDrawer.tsx), [status-cards.ts](../../server/src/routes/status-cards.ts). Tests: [StatusCardTile.test.tsx](../../ui/src/pages/StatusCards/StatusCardTile.test.tsx), [status-cards.test.ts](../../server/src/__tests__/status-cards.test.ts) + +#### `archive` + +Scope: ui +Storybook: Mount StatusCards and ArchivedStatusCardRow active/archived list, restore pending/failure and old-summary state. Archive differs from deletion. +Production: PATCH /status-cards/{id} archived true/false must persist and authorize change; restore may enqueue refresh, whose new outcome must be inspected rather than treating old summary as current. +Sources: Source: [index.tsx](../../ui/src/pages/StatusCards/index.tsx), [ArchivedStatusCardRow.tsx](../../ui/src/pages/StatusCards/ArchivedStatusCardRow.tsx), [status-cards.ts](../../server/src/routes/status-cards.ts). Tests: [status-cards.test.ts](../../server/src/__tests__/status-cards.test.ts), [status-card-update-engine.test.ts](../../server/src/__tests__/status-card-update-engine.test.ts) diff --git a/maps/feature-map/steering.md b/maps/feature-map/steering.md index 8366f9614d9..8ee67ca3b04 100644 --- a/maps/feature-map/steering.md +++ b/maps/feature-map/steering.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Tasks and conversations","sectionOrder":20,"order":60} +--- + # Steering and queued messages People can send follow-ups while an agent works, manage saved messages that have @@ -135,3 +139,19 @@ gap; do not assume browser queue controls are available in every channel. - An interrupted run may need verified cleanup before a saved follow-up can start. Preserve and inspect the wait reason; see [recovery](./recovery.md). - A healthy idle Agent Chat is waiting for input, not stranded unfinished work. + +### Storybook verification + +#### `drafts` + +Scope: ui +Storybook: Task-keyed restored draft and attachment receipts; task switch/reload, failed send and uncertain-save recovery. +Production: Retain correct task draft across navigation and reload; inspect authoritative saved receipt before claiming delivery; do not clear storage on every harness mount. +Sources: Source: [TaskChatComposer.tsx](../../ui/src/components/task-chat/TaskChatComposer.tsx), [composer-draft.ts](../../ui/src/lib/composer-draft.ts). Tests: [TaskChatComposer.test.tsx](../../ui/src/components/task-chat/TaskChatComposer.test.tsx), [issue-queued-comments-routes.test.ts](../../server/src/__tests__/issue-queued-comments-routes.test.ts) + +#### `approval-queue` + +Scope: ui +Storybook: Answered question/accepted approval delivery waiting, eligible steer/interrupt, failed delivery and fresh-session-only approval. +Production: Keep response delivery durable and distinct from editable comments; coalesce once, enforce fresh-session restrictions and deduplicate concurrent/retried continuation. +Sources: Source: [TaskChatQueuedMessages.tsx](../../ui/src/components/task-chat/TaskChatQueuedMessages.tsx), [question-response-delivery.ts](../../server/src/services/question-response-delivery.ts). Tests: [TaskChatQueuedMessages.test.tsx](../../ui/src/components/task-chat/TaskChatQueuedMessages.test.tsx), [question-response-delivery.test.ts](../../server/src/__tests__/question-response-delivery.test.ts), [issue-queued-comments-routes.test.ts](../../server/src/__tests__/issue-queued-comments-routes.test.ts) diff --git a/maps/feature-map/task-coordination.md b/maps/feature-map/task-coordination.md index aff32dc01d1..427edcda712 100644 --- a/maps/feature-map/task-coordination.md +++ b/maps/feature-map/task-coordination.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Tasks and conversations","sectionOrder":20,"order":20} +--- + # Delegation, dependencies, and signoff A larger task can coordinate child work, dependencies, reviewers, and execution controls while preserving a clear owner and a traceable completion decision. diff --git a/maps/feature-map/tasks.md b/maps/feature-map/tasks.md index b1fce19b313..0b2d90936ad 100644 --- a/maps/feature-map/tasks.md +++ b/maps/feature-map/tasks.md @@ -1,3 +1,7 @@ +--- +navigation: {"section":"Tasks and conversations","sectionOrder":20,"order":10} +--- + # Task creation and lifecycle People create, assign, organize, discuss, and finish tasks. A task retains its owner, project, priority, history, and outputs as it moves through the work lifecycle. @@ -73,3 +77,7 @@ Manual: Add a comment and edit authorized properties. Reload and verify history, - A status label alone does not prove that the requested work exists. - Single-assignee and atomic checkout rules still apply when tasks are created from different hosts. - Use [coordination](./task-coordination.md), [steering](./steering.md), and [documents](./documents-artifacts.md) for their distinct workflows. + +### Documentation scope: Tasks, conversations, and attention + +Recipes cover the main task/conversation/attention workflows. Full shell, permission, attachment, long-thread, and concurrency permutations remain to be enumerated. diff --git a/maps/feature-map/teams.md b/maps/feature-map/teams.md index c3ecdecbd4a..f6fc151941f 100644 --- a/maps/feature-map/teams.md +++ b/maps/feature-map/teams.md @@ -1,4 +1,8 @@ -# Team packages and catalog installation +--- +navigation: {"section":"Agents and reusable capabilities","sectionOrder":30,"order":40} +--- + +# Team packages and installation Operators can preview and install a team package with its agents and related resources. Catalog/package installation is available through the CLI/API; the repository also contains catalog UI components that are not a current top-level route. diff --git a/maps/feature-map/workspaces.md b/maps/feature-map/workspaces.md index b4fbadeac52..8d5ee64f22d 100644 --- a/maps/feature-map/workspaces.md +++ b/maps/feature-map/workspaces.md @@ -1,4 +1,8 @@ -# Execution workspaces, services, and files +--- +navigation: {"section":"Projects and execution","sectionOrder":40,"order":30} +--- + +# Workspaces, services, and files A project or task can use a managed workspace with inspectable files, Git state, services, and runtime controls. Operators can follow its lifecycle through provisioning, use, and closure. @@ -107,3 +111,12 @@ Manual: Provision a disposable workspace, wait for readiness, start an available provider home have separate meanings. Private source ownership remains attached to copied files after source configuration changes or workspace closure. - Use [recovery](./recovery.md) for divergence/export repair and [CLI operations](./cli-operations.md) for local worktree tooling. + +### Storybook verification + +#### `closure` + +Scope: ui +Storybook: Close-readiness checks, pending changes/active runs, blocked/pending/error close, retry close and eligible reopening. +Production: Confirm owned workspace shutdown, preserved files/Git state and permitted lifecycle transition/reopening; Browser Use session closure is unrelated. +Sources: Source: [ExecutionWorkspaceDetail.tsx](../../ui/src/pages/ExecutionWorkspaceDetail.tsx), [ExecutionWorkspaceCloseDialog.tsx](../../ui/src/components/ExecutionWorkspaceCloseDialog.tsx), [execution-workspaces.ts](../../server/src/routes/execution-workspaces.ts). Tests: [execution-workspaces-routes.test.ts](../../server/src/__tests__/execution-workspaces-routes.test.ts), [execution-workspaces-service.test.ts](../../server/src/__tests__/execution-workspaces-service.test.ts), [execution-workspace-reopen.test.ts](../../server/src/__tests__/execution-workspace-reopen.test.ts) diff --git a/maps/storybook-map/INDEX.md b/maps/storybook-map/INDEX.md deleted file mode 100644 index 709815f6b73..00000000000 --- a/maps/storybook-map/INDEX.md +++ /dev/null @@ -1,792 +0,0 @@ -# Storybook by feature - - - -[Contract and maintenance](README.md) · [Review findings](REVIEW.md) - -263 story files; 2503 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. - -## Getting started and access - -### Onboarding and first work - -Instance setup, company wizard, first agent and task. - -[Feature recipe](../feature-map/onboarding.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Getting started and access/Onboarding and first work/Onboarding/Agent arc](../../ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx) | `onboarding/adapter`, `onboarding/first-task` | unreviewed / production / fixtures | 31 / 11 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Four managed Codex cases use scoped immutable-image discovery and a stateful saved-probe fixture: native default, measured Legacy, permission refusal, and unconfirmed cleanup. Native isolation recipe added; these fixture setup responses do not establish server-resolved transport isolation, real sandbox cleanup, or local/SSH enforcement. The operator QA timeout/concurrency recipe was inspected; this preview does not verify the first-task fixture’s pre-admission runtime bounds. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task. | -| [Getting started and access/Onboarding and first work/Onboarding/Character](../../ui/storybook/stories/onboarding/onboarding-character.stories.tsx) | `onboarding/company` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The added native isolation recipe is outside this character preview’s demonstrated scope. The operator QA timeout/concurrency recipe was inspected; this preview does not verify the first-task fixture’s pre-admission runtime bounds. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task. | -| [Getting started and access/Onboarding and first work/Onboarding/Connect a model](../../ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx) | `onboarding/adapter`, `onboarding/first-task` | historical / prototype / fixtures | 5 / 0 | Older tile/mode preview; onboarding-agent-arc mounts the production wizard. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The expanded native isolation recipe is not exercised by this retained historical tile preview. The operator QA timeout/concurrency recipe was inspected; this preview does not verify the first-task fixture’s pre-admission runtime bounds. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task. | -| [Getting started and access/Onboarding and first work/Resume a saved draft](../../ui/storybook/stories/onboarding/resume-draft.stories.tsx) | `onboarding/resume` | current / production / fixtures | 4 / 3 | OnboardingWizard restores a seeded draft, malformed/unavailable-company handling and draft retention across a fixture remount. The reopen button belongs to the fixture host; real reload, account switch and storage failure remain separate checks. The merged wizard includes Codex harness/runner draft restoration and immutable-environment setup qualification. These isolated draft states do not establish the new native setup, task/follow-up, account or cleanup journey. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task. | - -### Login, invitations, and access - -Sessions, bootstrap, membership, roles, and CLI authorization. - -[Feature recipe](../feature-map/access.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Getting started and access/Login, invitations, and access/CLI authorization](../../ui/storybook/stories/access/cli-authorization.stories.tsx) | `access/cli-auth` | current / production / fixtures | 9 / 5 | Real CliAuth route with pending/expired/unavailable/preflight denial, approval/cancel and write pending/error. Fictional challenge; no CLI identity or real token is authorized. | -| [Getting started and access/Login, invitations, and access/Organization membership](../../ui/storybook/stories/access/membership.stories.tsx) | `access/membership` | current / production / fixtures | 7 / 2 | CompanyAccess member list and role change with loading/empty/failure/403 and failed mutation toast. Backend actor authority, invite lifecycle and durable membership are not verified. | -| [Getting started and access/Login, invitations, and access/Private tasks/00 Review guide](../../ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Getting started and access/Login, invitations, and access/Private tasks/01 Creation](../../ui/storybook/stories/access/private-tasks/01-creation.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 22 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. | -| [Getting started and access/Login, invitations, and access/Private tasks/02 Sharing](../../ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 26 / 10 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Getting started and access/Login, invitations, and access/Private tasks/03 Task actions](../../ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 11 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers](../../ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 12 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Getting started and access/Login, invitations, and access/Private tasks/05 Projects](../../ui/storybook/stories/access/private-tasks/05-projects.stories.tsx) | `access/resources`, `tasks/properties`, `projects/lifecycle` | unreviewed / production / fixtures | 19 / 12 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages](../../ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx) | `access/resources`, `tasks/properties`, `projects/lifecycle` | unreviewed / production / fixtures | 21 / 12 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. | -| [Getting started and access/Login, invitations, and access/Private tasks/07 User stories](../../ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 13 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. | -| [Getting started and access/Login, invitations, and access/Sign in](../../ui/storybook/stories/access/sign-in.stories.tsx) | `access/login` | current / production / fixtures | 6 / 3 | AuthPage email form, session read loading/error, submission pending/failure and navigation to Companies after a fixture session. Real authentication, bootstrap claim and sign-out remain separate. | - -### Companies and portability - -Company switching/settings, archival, package import/export. - -[Feature recipe](../feature-map/companies.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Getting started and access/Companies and portability/Import preview](../../ui/storybook/stories/companies/company-import.stories.tsx) | `companies/portability` | current / production / fixtures | 6 / 5 | Shipped CompanyImport GitHub-source preview, warnings, pending, error and 403. Plan/package replies are fictional; export, final import and real package fidelity remain separate scenarios/contracts. The merged production import page includes Codex harness/runner selection and preservation of native settings. This fixture review does not prove automatic native execution, credential reuse, import persistence or provider behavior. | -| [Getting started and access/Companies and portability/Selection and archived organizations](../../ui/storybook/stories/companies/company-selection.stories.tsx) | `companies/selection`, `companies/archive` | current / production / fixtures | 7 / 2 | Companies list, selection storage and archived-company restoration with loading/empty/error/403. This covers the archive list/restoration side; CompanySettings archive confirmation remains an additional UI scenario. | -| [Getting started and access/Companies and portability/Decision models/01 Settings](../../ui/storybook/stories/companies/decision-models/01-settings.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting`, `companies/decision-models` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Related decision-service examples show connection/model configuration, bounded test receipts or invocation history using shipped subjects and simulated data. No paid provider or authorization proof. | -| [Getting started and access/Companies and portability/Decision models/02 History](../../ui/storybook/stories/companies/decision-models/02-history.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting`, `companies/decision-models` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Related decision-service examples show connection/model configuration, bounded test receipts or invocation history using shipped subjects and simulated data. No paid provider or authorization proof. | -| [Getting started and access/Companies and portability/Decision models/03 Journey](../../ui/storybook/stories/companies/decision-models/03-journey.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting`, `companies/decision-models` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Related decision-service examples show connection/model configuration, bounded test receipts or invocation history using shipped subjects and simulated data. No paid provider or authorization proof. The upstream budget UI distinguishes soft warnings from hard stops; hard incidents retain raise-and-resume and keep-paused controls. | -| [Getting started and access/Companies and portability/Fast responses/01 Settings](../../ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting`, `companies/fast-responses` | 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. Related fast-response examples show configuration/test receipts or invocation history with shipped subjects and simulated data. A receipt is an acknowledgement, not task completion; no paid provider or authorization proof. | -| [Getting started and access/Companies and portability/Fast responses/02 History](../../ui/storybook/stories/companies/fast-responses/02-history.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting`, `companies/fast-responses` | 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. Related fast-response examples show configuration/test receipts or invocation history with shipped subjects and simulated data. A receipt is an acknowledgement, not task completion; no paid provider or authorization proof. | - -## Tasks and conversations - -### Task creation and lifecycle - -Creation, assignment, lists, properties, comments, and completion. - -[Feature recipe](../feature-map/tasks.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx) | `tasks/completion`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Tasks and conversations/Task creation and lifecycle/Product/Chat & Comments](../../ui/storybook/stories/tasks/chat-comments.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Tasks and conversations/Task creation and lifecycle/Tasks/Completed activity preview](../../ui/storybook/stories/tasks/completed-activity.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | current / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Tasks and conversations/Task creation and lifecycle/Composer/Add menu](../../ui/storybook/stories/tasks/composer-add-menu.stories.tsx) | `tasks/create` | unreviewed / production / fixtures | 14 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker](../../ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx) | `tasks/create`, `runs-adapters/availability` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker](../../ui/storybook/stories/tasks/composer-model-picker.stories.tsx) | `tasks/create`, `runs-adapters/availability` | mixed / mixed / fixtures | 57 / 30 | Most examples use a local picker implementation; live picker examples use ComposerRunSettingsLiveStory. Do not count the whole suite as production parity. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) | `tasks/organize`, `questions-and-approvals/governance`, `budgets-costs/budgets`, `activity/activity` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) | `tasks/create`, `agents/hire`, `projects/lifecycle`, `goals/hierarchy` | unreviewed / production / fixtures | 17 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Tasks and conversations/Task creation and lifecycle/External Objects](../../ui/storybook/stories/tasks/external-objects.stories.tsx) | `tasks/properties` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Product/Issue Management](../../ui/storybook/stories/tasks/issue-management.stories.tsx) | `tasks/properties`, `tasks/organize` | unreviewed / production / fixtures | 11 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. Focused creation-visibility stories mount the production collection with simulated hierarchy reads and assert hidden roots, opt-in inclusion, and the unchecked filter control. Creation visibility examples and fixture setup now live in a support module so the surface matrix stays below 1000 lines; exported story IDs are unchanged. Creation visibility now shares the subscribed preference across modern and legacy controls; hierarchy child reads share a bounded rendering budget. Source alignment inspected; server behavior is tested separately. Hierarchy fetch and rendering budgets are separate; loaded context remains during paging. The large-tree UI regression exercises delayed reads in both list interfaces. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Components/Entity pickers/Mobile](../../ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx) | `tasks/create` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Composer/New task](../../ui/storybook/stories/tasks/new-task-composer.stories.tsx) | `tasks/create`, `workspaces/binding` | current / production / fixtures | 40 / 25 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. WorktreePicker, ReuseWorktree, CreateWithReusedWorktree and NewWorktreeAfterReuse exercise workspace selection and submitted fixture request values. Actual admission/binding and execution remain outside this story. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview](../../ui/storybook/stories/tasks/runner-activity.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | current / production / fixtures | 14 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff](../../ui/storybook/stories/tasks/successful-run-handoff.stories.tsx) | `tasks/completion`, `recovery/diagnosis` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes](../../ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Tasks and conversations/Task creation and lifecycle/Task chat/Mobile streaming follow](../../ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Product/Task chat/System notice](../../ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Tasks/Context notices](../../ui/storybook/stories/tasks/task-context-notices.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 1 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. | -| [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/00 Review guide](../../ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx) | `tasks/discussion` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/01 Components](../../ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 5 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/02 Mixed-author journey](../../ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 5 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | - -### Delegation, dependencies, and signoff - -Child work, prerequisites, reviewers, and task-tree controls. - -[Feature recipe](../feature-map/task-coordination.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Tasks and conversations/Delegation, dependencies, and signoff/Product/Decisions/Stalled review actions](../../ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx) | `task-coordination/signoff` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Delegation, dependencies, and signoff/Product/Issue Monitor surfaces](../../ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx) | `task-coordination/tree-control` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task](../../ui/storybook/stories/task-coordination/originating-tasks.stories.tsx) | `task-coordination/delegation`, `projects/task-context` | unreviewed / production / fixtures | 14 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Creation visibility now defaults to hiding automated independent tasks, with a Show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. | -| [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx) | `task-coordination/dependencies`, `task-coordination/delegation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Creation visibility now defaults to hiding automated independent tasks, with a Show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. Creation visibility now shares the subscribed preference across modern and legacy controls; hierarchy child reads share a bounded rendering budget. Source alignment inspected; server behavior is tested separately. Hierarchy fetch and rendering budgets are separate; loaded context remains during paging. The large-tree UI regression exercises delayed reads in both list interfaces. | -| [Tasks and conversations/Delegation, dependencies, and signoff/Product/Task Watchdog surfaces](../../ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx) | `task-coordination/tree-control` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | - -### Inbox, decisions, and search - -Personal triage, decision queues, unread/blocked views, search, and personal task toasts. - -[Feature recipe](../feature-map/inbox-search.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab](../../ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx) | `inbox-search/triage`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Tasks and conversations/Inbox, decisions, and search/Decisions/DecisionCard](../../ui/storybook/stories/inbox-search/decision-card.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Inbox, decisions, and search/Pages/Decisions Desk](../../ui/storybook/stories/inbox-search/decisions-desk.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Inbox, decisions, and search/Personal task views](../../ui/storybook/stories/inbox-search/inbox-views.stories.tsx) | `inbox-search/views` | current / production / fixtures | 8 / 0 | Shipped Inbox host with Mine/Recent/Unread/Blocked under combined-inbox flags and list states. Approvals/join requests/run lists are isolated alongside tasks. Failed/denied list queries currently fall back to Inbox zero; personal participation/read metadata and server counts remain production verification. Mine/recent fixture tasks are human-created; the upstream agent-created-task filter changes are separate visibility scenarios. | -| [Tasks and conversations/Inbox, decisions, and search/Personal task notifications](../../ui/storybook/stories/inbox-search/personal-task-toasts.stories.tsx) | `inbox-search/toasts` | current / production / fixtures | 4 / 4 | LiveUpdatesProvider and ToastViewport consume fixture socket eligibility, suppress unrelated/visible-task events and deduplicate replay. Server eligibility metadata is simulated; no persisted multiplayer participation proof. The upstream Inbox recipe adds agent-created-task discovery checks; this LiveUpdatesProvider suite still tests toast eligibility only. | -| [Tasks and conversations/Inbox, decisions, and search/Product/Search & Command K](../../ui/storybook/stories/inbox-search/search.stories.tsx) | `inbox-search/search` | unreviewed / prototype / fixtures | 1 / 0 | Local search-page composition mounts production result components; does not establish parity with the production Search route. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | -| [Tasks and conversations/Inbox, decisions, and search/Pages/Decisions](../../ui/storybook/stories/inbox-search/what-needs-me.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | - -### Agent conversations and project handoff - -Persistent conversations, discovery, handoff, and gated board chat. - -[Feature recipe](../feature-map/agent-chat.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | unreviewed / production / fixtures | 9 / 1 | Wrapper mounts production Layout and AgentChat; conversation selection and sends use in-memory routes. Directory name is not prototype evidence. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements. | -| [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat](../../ui/storybook/stories/agent-chat/agent-chat.stories.tsx) | `agent-chat/discovery`, `agent-chat/history`, `agent-chat/handoff` | 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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. ProjectCreated, ExistingProject, MultipleRepositories, ProjectWithoutRepository and ProjectCreationFailed show linked handoff results/navigation through shipped chat/task hosts. Tool execution and persistence are simulated. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements. | -| [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | current / production / fixtures | 10 / 1 | Support module re-exports production AgentConversationSidebar; search/selection use fixture callbacks. | -| [Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry](../../ui/storybook/stories/agent-chat/chat-entry.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | historical / mixed / fixtures | 9 / 3 | Retained first-created-agent sidebar/landing design predates personal primary-agent selection. Shared production conversation components remain useful. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements. | -| [Tasks and conversations/Agent conversations and project handoff/Conference Room](../../ui/storybook/stories/agent-chat/conference-room.stories.tsx) | `agent-chat/conference-room` | current / production / fixtures | 5 / 4 | BoardChat empty, reply, send pending/error/403 through fixture SSE and persisted comment reads. 403 uses the shipped generic unavailable message; route gates and real Claude execution remain separate. | - -### Questions and approvals - -Question/plan responses, formal approvals, and app-tool review. - -[Feature recipe](../feature-map/questions-and-approvals.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx) | `questions-and-approvals/dismiss-and-reopen`, `agent-chat/history` | unreviewed / production / fixtures | 9 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. | -| [Tasks and conversations/Questions and approvals/Composer/Question flow](../../ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx) | `questions-and-approvals/questions` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. | -| [Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews](../../ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx) | `questions-and-approvals/tool-review`, `connection-setup/task-request` | unreviewed / production / fixtures | 25 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions](../../ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx) | `questions-and-approvals/plan-review`, `task-coordination/delegation` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience`, `questions-and-approvals/plan-review`, `questions-and-approvals/continuation` | unreviewed / production / fixtures | 53 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Plan approval Pending, Confirmed, ExpiredByTargetChange and ResumeFailed states use shipped interaction cards. The continuation association covers accepted-but-resume-failed presentation only; no successful resumption, retry or duplicate-suppression proof. | -| [Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience` | unreviewed / production / fixtures | 12 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Questions and approvals/Composer/Interaction above composer](../../ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience` | current / production / fixtures | 15 / 5 | Corrected local dismissal/send harness: questions leave no pending badge; confirmations retain reopen. Production cards/composer; persisted dismissal is covered separately by unanswered-question fixtures. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. | -| [Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx) | `questions-and-approvals/dismiss-and-reopen`, `tasks/discussion` | unreviewed / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. | - -### Steering and queued messages - -Follow-ups, queue edits, interruption, and pause/resume. - -[Feature recipe](../feature-map/steering.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Tasks and conversations/Steering and queued messages/Draft recovery](../../ui/storybook/stories/steering/composer-draft-recovery.stories.tsx) | `steering/drafts` | current / production / fixtures | 6 / 3 | TaskChatComposer uses owned task-keyed browser drafts, uncertain submission fence, switch/restore and failed/accepted send callbacks. API receipt authority and real submission durability remain separate. Storybook-owned draft keys are reset using the matching retained submission ID on setup and cleanup; same-browser uncertain-to-empty/send switching is covered separately. | -| [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) | `steering/queue`, `steering/edit-order-discard`, `steering/steer`, `steering/interrupt` | current / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. | -| [Tasks and conversations/Steering and queued messages/Accepted response delivery](../../ui/storybook/stories/steering/durable-response-queue.stories.tsx) | `steering/approval-queue`, `recovery/user-continuation` | current / production / fixtures | 7 / 6 | Accepted immutable response, cleanup wait, unavailable admission, empty queue and interrupt delivery states. Local callbacks remove delivered entries; durable queue/coalescing and fresh-session authority need production tests. The expanded native copyback recovery recipe requires harness stop proof; these generic exhaustion/queued-response fixtures do not establish that path. The shipped pending-delivery path removes rows optimistically and shows no separate progress indicator; the Delivering story asserts that actual presentation. Retained legacy files use a separate recovery form with verified stop evidence; these exhaustion and response-queue examples do not establish file repair. | -| [Tasks and conversations/Steering and queued messages/Surfaces/Interrupt Handoff](../../ui/storybook/stories/steering/interrupt-handoff.stories.tsx) | `steering/interrupt` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Steering and queued messages/Composer/Paused task takeover](../../ui/storybook/stories/steering/paused-composer.stories.tsx) | `steering/stop-and-pause` | historical / prototype / fixtures | 8 / 0 | Retained local paused takeover; task-execution-controls exercises the shipped pause/stop controls. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. | -| [Tasks and conversations/Steering and queued messages/Composer/Execution controls](../../ui/storybook/stories/steering/task-execution-controls.stories.tsx) | `steering/stop-and-pause` | current / production / fixtures | 22 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. | - -### Documents, attachments, and work products - -Versioned documents, annotations, files, outputs, and artifact library. - -[Feature recipe](../feature-map/documents-artifacts.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Commit](../../ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Data](../../ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Document](../../ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/File](../../ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Image](../../ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Link preview](../../ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Pull request](../../ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Video](../../ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Artifact upload/01 Artifacts pane](../../ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 10 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Artifact upload/02 Paused task journey](../../ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts](../../ui/storybook/stories/documents-artifacts/artifacts.stories.tsx) | `documents-artifacts/library`, `documents-artifacts/work-products` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Components/CSV File Tab](../../ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Product/Documents/Annotations](../../ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx) | `documents-artifacts/annotations` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Product/Document Comments](../../ui/storybook/stories/documents-artifacts/document-comments.stories.tsx) | `documents-artifacts/annotations` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Document revisions](../../ui/storybook/stories/documents-artifacts/document-revisions.stories.tsx) | `documents-artifacts/documents` | current / production / fixtures | 9 / 4 | IssueDocumentsSection renders current/edit/historical preview and append-only restore with mutation error. Read/loading failures retain shipped fallback rendering; no persisted concurrency or authorization proof. | -| [Tasks and conversations/Documents, attachments, and work products/Components/File Viewer Sheet](../../ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview](../../ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace](../../ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey](../../ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Tasks and conversations/Documents, attachments, and work products/Task Chat/Rich Work Product Cards](../../ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery](../../ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx) | `documents-artifacts/library`, `documents-artifacts/work-products` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks and conversations/Documents, attachments, and work products/Tasks/Text file tabs](../../ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | - -## Agents and reusable capabilities - -### Hiring, configuration, and organization - -Agent identity, instructions, reporting lines, lifecycle, and built-ins. - -[Feature recipe](../feature-map/agents.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail](../../ui/storybook/stories/agents/agent-detail.stories.tsx) | `agents/lifecycle`, `agents/instructions` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Persistent files](../../ui/storybook/stories/agents/agent-files.stories.tsx) | `agents/instructions` | unreviewed / production / fixtures | 9 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management](../../ui/storybook/stories/agents/agent-management.stories.tsx) | `agents/lifecycle`, `agents/instructions`, `execution-environments/assignment` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. ForcedKubernetesExecution and ForcedKubernetesMissingEnvironment mount AgentConfigForm with a forced execution target or missing-target warning. Read-only assignment presentation; no saved target or remote execution proof. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review of the Environment override and Codex lifecycle/ACP selectors confirms reuse of the harness SelectPopover with the existing option and save semantics; render/play and live execution of these updated controls remain unverified. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages](../../ui/storybook/stories/agents/agent-persona-pages.stories.tsx) | `agents/organization`, `navigation-preferences/profile` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas](../../ui/storybook/stories/agents/agent-personas.stories.tsx) | `agents/organization`, `navigation-preferences/profile` | unreviewed / production / fixtures | 19 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh](../../ui/storybook/stories/agents/agent-settings-redesign.stories.tsx) | `agents/lifecycle`, `agents/instructions` | mixed / mixed / fixtures | 20 / 1 | Production configuration panels in a locally composed settings shell; full AgentDetail route parity remains unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Existing Legacy/native Codex editing, light/mobile and Advanced states retained unchanged. Source review of the Environment override and Codex lifecycle/ACP selectors confirms reuse of the harness SelectPopover with the existing option and save semantics; render/play and live execution of these updated controls remain unverified. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Built-in Agents](../../ui/storybook/stories/agents/built-in-agents.stories.tsx) | `agents/built-in` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Codex runner/Creation](../../ui/storybook/stories/agents/codex-runner/creation.stories.tsx) | `agents/hire`, `runs-adapters/validation` | current / production / fixtures | 9 / 7 | Production NewAgent and AgentBasicsDialog with isolated API fixtures. Automatic and explicit Legacy choices, qualified/unqualified discovery, old native links, setup failure and returned hire identity are asserted in source. Fixture runtime selection follows the requested runner and simulated target qualification; render/play, production persistence and provider execution are not verified by this source pass. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components](../../ui/storybook/stories/agents/external-agent-invite/components.stories.tsx) | `agents/hire`, `access/invitations` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx) | `agents/hire`, `access/invitations` | unreviewed / production / fixtures | 20 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/New agent](../../ui/storybook/stories/agents/new-agent-onboarding.stories.tsx) | `agents/hire` | historical / prototype / fixtures | 37 / 1 | Retained local wizard predates production ui/src/components/new-agent flow; shared fields do not make the wizard current. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide](../../ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx) | `agents/primary-agent`, `tasks/create`, `agent-chat/discovery` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components](../../ui/storybook/stories/agents/primary-agent/01-components.stories.tsx) | `agents/primary-agent`, `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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar](../../ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx) | `agents/primary-agent`, `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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents](../../ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx) | `agents/primary-agent`, `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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task](../../ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx) | `agents/primary-agent`, `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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat](../../ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx) | `agents/primary-agent`, `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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys](../../ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx) | `agents/primary-agent`, `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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation](../../ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx) | `agents/primary-agent`, `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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Agents and reusable capabilities/Hiring, configuration, and organization/Summaries/SummarySlotCard](../../ui/storybook/stories/agents/summary-slot-card.stories.tsx) | `agents/built-in` | unreviewed / production / fixtures | 15 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | - -### Runs, harnesses, and model accounts - -Adapter/model setup, account validation, transcripts, and run history. - -[Feature recipe](../feature-map/runs-adapters.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections](../../ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx) | `runs-adapters/validation`, `agents/hire` | current / production / fixtures | 7 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Usage limits](../../ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 8 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Review](../../ui/storybook/stories/runs-adapters/ai-connections.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 46 / 15 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host](../../ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx) | `runs-adapters/validation`, `connection-setup/catalog` | unreviewed / production / fixtures | 5 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Connection pools](../../ui/storybook/stories/runs-adapters/connection-pools.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 16 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner](../../ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx) | `runs-adapters/validation`, `gateways-profiles/client-connect` | unreviewed / production / fixtures | 4 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/07 Subscription sign-in](../../ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 4 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/00 Overview](../../ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx) | `runs-adapters/validation` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/01 Onboarding](../../ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 6 / 3 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/02 Connect](../../ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 14 / 3 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/03 Agent](../../ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 34 / 7 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/04 Manage](../../ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 11 / 5 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/05 Recovery](../../ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 7 / 2 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/06 Production components](../../ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 5 / 5 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | -| [Agents and reusable capabilities/Runs, harnesses, and model accounts/Composer/Session goals](../../ui/storybook/stories/runs-adapters/session-goals.stories.tsx) | `runs-adapters/session` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup. | - -### Skills and Skill Studio - -Discovery, sources, authoring, revisions, tests, and agent policies. - -[Feature recipe](../feature-map/skills.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Agents and reusable capabilities/Skills and Skill Studio/Agent Skills/AgentSkillRow](../../ui/storybook/stories/skills/agent-skill-row.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/QA / Agent skills edge states](../../ui/storybook/stories/skills/agent-skills-edge.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/AgentsUsingSkill](../../ui/storybook/stories/skills/agents-using-skill.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/EditACopy](../../ui/storybook/stories/skills/fork-skill-flow.stories.tsx) | `skills/authoring` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/Product/Skill Studio · FrontmatterPanel](../../ui/storybook/stories/skills/frontmatter-panel.stories.tsx) | `skills/authoring` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey](../../ui/storybook/stories/skills/github-skills-journey.stories.tsx) | `skills/versions`, `skills/discovery`, `skills/policy` | unreviewed / production / fixtures | 14 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. AssignToAgent and AssignedSkill demonstrate library/detail assignment with local policy fixtures. No runtime enforcement or backend persistence proof. | -| [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills](../../ui/storybook/stories/skills/github-synced-skills.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 21 / 8 | Production Sources page with fixture APIs. Disconnect and legacy removal stories show a required keep-or-delete choice; the real copy, delete, and reimport flows were also tested locally. Other routes remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages](../../ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress](../../ui/storybook/stories/skills/skill-import-progress.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/Product/Skills/Policy surfaces](../../ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents and reusable capabilities/Skills and Skill Studio/Test runs](../../ui/storybook/stories/skills/skill-test-runs.stories.tsx) | `skills/testing` | current / production / fixtures | 9 / 1 | SkillStudio test history statuses and result detail with immutable fixture output/version. No agent/provider runs; authoring, harness execution, persisted costs and snapshots require production tests. | -| [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail](../../ui/storybook/stories/skills/skills-store-detail.stories.tsx) | `skills/discovery`, `skills/versions`, `skills/policy` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Related examples cover fixture revisions and agent attachment selection. Save and attachment submission callbacks are no-ops; durable authoring, grants and enforcement are not established. | -| [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Discovery grid](../../ui/storybook/stories/skills/skills-store-discovery.stories.tsx) | `skills/discovery` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | - -### Team packages and installation - -Catalog preview/install via CLI/API; catalog UI availability called out. - -[Feature recipe](../feature-map/teams.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog](../../ui/storybook/stories/teams/team-catalog.stories.tsx) | `teams/preview`, `teams/discovery`, `teams/install`, `teams/configuration` | unreviewed / production / fixtures | 12 / 0 | Renders shipped TeamCatalog source, but feature map documents current CLI/API access and no top-level catalog route. InstallApplyProgress, InstallSuccess and InstalledStates show simulated installation results; InstallPreview edits adapter choices in local state. No routed catalog, real package installation, account setup or working-agent proof. | - -## Projects and execution - -### Projects and repositories - -Project lifecycle, task context, repository configuration, and defaults. - -[Feature recipe](../feature-map/projects.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Projects and execution/Projects and repositories/Proposals/Project repos/New project](../../ui/storybook/stories/projects/new-project-repos.stories.tsx) | `projects/repositories` | proposed / mixed / fixtures | 18 / 5 | RepositoryEditor is shipped, but NewProjectPrototype composes its own creation flow. Preserve proposal until route parity is checked. | -| [Projects and execution/Projects and repositories/Workspaces/Project runtime provision command](../../ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx) | `projects/defaults`, `workspaces/provisioning` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Projects and execution/Projects and repositories/Proposals/Project repos/Configuration](../../ui/storybook/stories/projects/project-repos-configuration.stories.tsx) | `projects/repositories` | proposed / mixed / fixtures | 12 / 0 | Production properties plus local configuration page composition; repository interaction is simulated. | -| [Projects and execution/Projects and repositories/Product/Projects Goals Workspaces](../../ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx) | `projects/lifecycle`, `goals/hierarchy`, `workspaces/binding` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed nullable project references and guarded runtime invalidations. Existing summaries remain project-bound and retain their routes; null-project execution workspace rendering and controls remain a coverage gap. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | - -### Goals and work alignment - -Goal hierarchy, ownership, status, and project/task context. - -[Feature recipe](../feature-map/goals.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Projects and execution/Goals and work alignment/Aligned work and navigation](../../ui/storybook/stories/goals/goal-alignment.stories.tsx) | `goals/alignment`, `goals/navigation` | current / production / fixtures | 6 / 2 | GoalDetail child navigation and aligned-project tab with empty/loading/failure/403. Current UI displays relationships but has no project goal-assignment control; no invented assignment UI. | - -### Workspaces, services, and files - -Provisioning, task bindings, services/logs, Git/files, and closure. - -[Feature recipe](../feature-map/workspaces.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity](../../ui/storybook/stories/workspaces/browser-use-activity.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer](../../ui/storybook/stories/workspaces/browser-use-footer.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 21 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel](../../ui/storybook/stories/workspaces/browser-use.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 28 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Projects and execution/Workspaces, services, and files/Components/SearchableSelect/Workspace picker](../../ui/storybook/stories/workspaces/searchable-select.stories.tsx) | `workspaces/binding` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Projects and execution/Workspaces, services, and files/Close readiness](../../ui/storybook/stories/workspaces/workspace-close.stories.tsx) | `workspaces/closure` | current / production / fixtures | 7 / 7 | Readiness dialog with loading, inspection failure/403, running-task block and pending/accepted archive response. No real workspace cleanup, Git removal or service shutdown is performed. The separate remote-source recipe requires Git isolation and preservation of unpublished task work; these close-readiness fixtures do not exercise repository cloning or reconstruction. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Projects and execution/Workspaces, services, and files/Issue/Workspace File Browser](../../ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx) | `workspaces/files-git` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Projects and execution/Workspaces, services, and files/Workspaces/Runtime provisioning status](../../ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx) | `workspaces/provisioning` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed ExecutionWorkspaceDetail null-project handling. This suite mounts only the unchanged RuntimeProvisionStatusValue inside a local context row; it does not exercise the full detail page or projectless queries. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | -| [Projects and execution/Workspaces, services, and files/Workspaces/Service control bar](../../ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx) | `workspaces/services` | unreviewed / production / fixtures | 16 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings. | - -### Execution environments - -Local, SSH, sandbox providers, target probes, and custom images. - -[Feature recipe](../feature-map/execution-environments.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Projects and execution/Execution environments/Custom images](../../ui/storybook/stories/execution-environments/custom-images.stories.tsx) | `execution-environments/images` | current / production / fixtures | 6 / 3 | CompanyEnvironments image metadata: unconfigured, captured, unsupported, failed, loading and 403. No live setup terminal, provider capture, rollback or relink is executed. | -| [Projects and execution/Execution environments/Configuration, capabilities, and probes](../../ui/storybook/stories/execution-environments/environment-states.stories.tsx) | `execution-environments/configuration`, `execution-environments/capabilities`, `execution-environments/probe` | current / production / fixtures | 10 / 4 | CompanyEnvironments configuration/edit, unsupported capabilities and probe pending/failure/success. No provider contacted. List read/loading failures expose shipped fallback behavior, not dedicated error UI. | - -### Recovery - -Stopped work, workspace repair, bounded continuation, and reconnect. - -[Feature recipe](../feature-map/recovery.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Projects and execution/Recovery/App/Connection recovery](../../ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx) | `recovery/reconnect` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Task chat/Recovery notice](../../ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx) | `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Tasks/Execution recovery](../../ui/storybook/stories/recovery/execution-recovery.stories.tsx) | `recovery/diagnosis` | unreviewed / production / fixtures | 18 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Product/Issue/Blocked notice](../../ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx) | `recovery/diagnosis`, `task-coordination/dependencies` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Tasks/Model capacity retry](../../ui/storybook/stories/recovery/model-capacity-retry.stories.tsx) | `recovery/bounded-continuation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Exhaustion and user decisions](../../ui/storybook/stories/recovery/recovery-gap-states.stories.tsx) | `recovery/exhaustion`, `recovery/unknown-outcome` | current / production / fixtures | 7 / 7 | Exhaustion notice, blocked authority, retry pending/failure/accepted and inactive notice; unknown-outcome action card is rendered separately. Retry callbacks and disposition context are simulated; no real continuation proof. The expanded native copyback recovery recipe requires harness stop proof; these generic exhaustion/queued-response fixtures do not establish that path. Retained legacy files use a separate recovery form with verified stop evidence; these exhaustion and response-queue examples do not establish file repair. | -| [Projects and execution/Recovery/Design previews/Recovery notice](../../ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | current / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Product/Issue Scheduled retry surfaces](../../ui/storybook/stories/recovery/scheduled-retry.stories.tsx) | `recovery/bounded-continuation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Paperclip/Source Issue Recovery](../../ui/storybook/stories/recovery/source-issue-recovery.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Source review confirms ordinary recovery fixtures remain applicable after the native-owner resolution gate; native-owner stop verification has its own suite. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Paperclip/Source-resolved Fold](../../ui/storybook/stories/recovery/source-resolved-fold.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Workspace branch recovery/01 Repair card](../../ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx) | `recovery/workspace` | unreviewed / production / fixtures | 8 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Workspace branch recovery/02 Task journey](../../ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx) | `recovery/workspace` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Workspace finalization recovery/01 Notice](../../ui/storybook/stories/recovery/workspace-finalization-recovery/01-notice.stories.tsx) | `recovery/workspace`, `recovery/source-action` | current / production / fixtures | 6 / 2 | Production quiet status; automatic restoration, legacy operator fallback, queued and resolved states. No task repair form, process details or API simulation. Provider proof is verified by separate server and harness tests. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Projects and execution/Recovery/Workspace finalization recovery/02 Task journey](../../ui/storybook/stories/recovery/workspace-finalization-recovery/02-task-journey.stories.tsx) | `recovery/workspace`, `recovery/source-action` | unreviewed / mixed / fixtures | 3 / 0 | Production shell, status, bubbles and composer in a local conversation composition; shows restoration and saved work waiting for confirmation. Fixture messages; not the shipped task page or live provider acceptance. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | - -## Apps, channels, and extensions - -### Connection setup - -Catalog, MCP links, task requests, authentication, and setup resumption. - -[Feature recipe](../feature-map/connection-setup.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Apps, channels, and extensions/Connection setup/Components/Agent setup prompt](../../ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx) | `connection-setup/channel-setup`, `gateways-profiles/client-connect` | unreviewed / production / fixtures | 11 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Canonical icon registry](../../ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx) | `connection-setup/catalog` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Catalog source selection](../../ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx) | `connection-setup/catalog` | proposed / prototype / fixtures | 12 / 1 | Local catalog composition uses shipped cards and filters; retains design exploration purpose, not acceptance of the Apps route. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Connect discoverability (PAP-11091)](../../ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx) | `connection-setup/catalog` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Connect name at create time (PAP-11283)](../../ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure`, `connection-setup/draft-recovery`, `connection-setup/identity-and-access`, `app-permissions/action-policy`, `app-permissions/test-action` | unreviewed / production / fixtures | 26 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. SavedDraftResume, Reconnect, SelectedAgents and ManageToolPermissions demonstrate production setup/permissions/test surfaces with an in-memory wrapper. Reload loses the draft; these examples do not verify persisted recovery. NewToolsAllowed does not demonstrate quarantined-action review. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Connections/Browser Use Cloud/Settings](../../ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx) | `connection-setup/credentials` | current / production / fixtures | 9 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure`, `connection-setup/draft-recovery`, `connection-setup/identity-and-access`, `app-permissions/action-policy`, `app-permissions/test-action` | unreviewed / production / fixtures | 27 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. SavedDraftResume, Reconnect, SelectedAgents and ManageToolPermissions demonstrate production setup/permissions/test surfaces with an in-memory wrapper. Reload loses the draft; these examples do not verify persisted recovery. NewToolsAllowed does not demonstrate quarantined-action review. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-setup/connection-instructions.stories.tsx) | `connection-setup/credentials`, `agents/instructions` | unreviewed / production / fixtures | 20 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Connections/Provider choice](../../ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 7 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Enterpret connector](../../ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 9 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure`, `connection-setup/draft-recovery`, `connection-setup/identity-and-access`, `app-permissions/action-policy`, `app-permissions/test-action` | unreviewed / production / fixtures | 26 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. SavedDraftResume, Reconnect, SelectedAgents and ManageToolPermissions demonstrate production setup/permissions/test surfaces with an in-memory wrapper. Reload loses the draft; these examples do not verify persisted recovery. NewToolsAllowed does not demonstrate quarantined-action review. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx) | `connection-setup/credentials`, `routines/triggers` | unreviewed / production / fixtures | 27 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Connections/In-task connections](../../ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx) | `connection-setup/task-request` | unreviewed / production / fixtures | 78 / 23 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Managed Cloud OAuth handoff](../../ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx) | `connection-setup/handoff` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Connections/Memory](../../ui/storybook/stories/connection-setup/memory-connectors.stories.tsx) | `connection-setup/credentials`, `agents/instructions` | unreviewed / production / fixtures | 21 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Reviews/PAP-17835 Personal connection identity](../../ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 10 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure`, `connection-setup/draft-recovery`, `connection-setup/identity-and-access`, `app-permissions/action-policy`, `app-permissions/test-action` | unreviewed / production / fixtures | 21 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. SavedDraftResume, Reconnect, SelectedAgents and ManageToolPermissions demonstrate production setup/permissions/test surfaces with an in-memory wrapper. Reload loses the draft; these examples do not verify persisted recovery. NewToolsAllowed does not demonstrate quarantined-action review. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | - -### App access and action permissions - -Agent grants, off/ask/allowed actions, discovery, tests, and revocation. - -[Feature recipe](../feature-map/app-permissions.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard](../../ui/storybook/stories/app-permissions/action-card.stories.tsx) | `app-permissions/test-action`, `app-permissions/action-policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test](../../ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx) | `app-permissions/test-action`, `app-permissions/action-policy` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps, channels, and extensions/App access and action permissions/Apps/Managed accounts](../../ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx) | `app-permissions/account-maintenance` | current / production / fixture-server | 1 / 0 | Production Browse requires owned tests/aggregator-accounts/test-drive.ts on localhost:4310; providers are simulated. Not an offline story. | -| [Apps, channels, and extensions/App access and action permissions/Review newly discovered actions](../../ui/storybook/stories/app-permissions/catalog-review.stories.tsx) | `app-permissions/catalog-change` | current / production / fixtures | 7 / 2 | Shipped ActionsSection quarantine reviewer with allowed/blocked decisions, empty/refreshing/saving/read-only props. Callbacks simulate catalog persistence; discovery failures belong to AppDetail and backend authority remains separate. | -| [Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed](../../ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx) | `app-permissions/agent-access`, `app-permissions/action-policy` | unreviewed / production / fixtures | 12 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | - -### External chat and email - -Provider-specific identity, threads, files, delivery, and endpoint upkeep. - -[Feature recipe](../feature-map/chat-channels.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Apps, channels, and extensions/External chat and email/Connections/AgentMail setup](../../ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 19 / 16 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/External chat and email/Connections/AgentMail settings](../../ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx) | `chat-channels/lifecycle` | unreviewed / production / fixtures | 8 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation: EmailEndpointSettings remains the mounted inbox subsection. The surrounding ChatEndpointDetail connection-default editor and its save/inheritance behavior are not represented here. | -| [Apps, channels, and extensions/External chat and email/Connections/AgentMail tasks](../../ui/storybook/stories/chat-channels/agentmail.stories.tsx) | `chat-channels/conversation` | unreviewed / prototype / fixtures | 9 / 2 | Local EmailTaskExperience combines production composer/bubbles with simulated email lifecycle; compare against IssueDetail before claiming page parity. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. | -| [Apps, channels, and extensions/External chat and email/Task-linked files](../../ui/storybook/stories/chat-channels/channel-attachments.stories.tsx) | `chat-channels/attachments` | current / production / fixtures | 5 / 2 | TaskChatBubble with received/outbound saved attachment receipts, no/multiple files and missing filename. File links are fictional; no download, provider transfer or authorization is proved. | -| [Apps, channels, and extensions/External chat and email/Connections/Chat connection actions](../../ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx) | `chat-channels/providers` | unreviewed / production / fixtures | 1 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. | -| [Apps, channels, and extensions/External chat and email/Connections/Chat management](../../ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx) | `chat-channels/lifecycle`, `chat-channels/identity`, `chat-channels/conversation` | unreviewed / production / fixtures | 15 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation: the mounted endpoint adds connection and destination editors. Local endpoint PATCH/resource PUT preserve defaults; workspace-choice requests now return only active/idle, unclosed fixture workspaces. Browser save/error/reload and new-conversation inheritance remain unverified. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Inspected channel task-default controls, optional API fields, avatar rendering and matching fixture updates; live defaults inheritance and permission checks remain outside these stories. Access, InvitePeople, ConnectAndTest and Conversations render the shipped endpoint detail with simulated identity linking and conversation data. External delivery and identity authorization are not live. | -| [Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management](../../ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx) | `chat-channels/providers`, `chat-channels/conversation` | unreviewed / production / fixtures | 33 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation: mounted repository and endpoint editors use simulated defaults. Endpoint PATCH now persists omitted/null/concrete values across GET and resets on remount; repository PUT already preserves them. Choice caches intentionally contain no projects/workspaces. Browser editor interactions, access denials and new-task inheritance remain unverified. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Inspected channel task-default controls, optional API fields, avatar rendering and matching fixture updates; live defaults inheritance and permission checks remain outside these stories. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task. | -| [Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes](../../ui/storybook/stories/chat-channels/github-chat.stories.tsx) | `chat-channels/providers`, `chat-channels/conversation` | historical / prototype / fixtures | 48 / 9 | Historical wizard retained for original setup/access/review design; current GitHub setup is ui/src/pages/apps/chat/GitHubChatSetup.tsx. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. | -| [Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot](../../ui/storybook/stories/chat-channels/github-connections.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 7 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) | `chat-channels/conversation`, `chat-channels/providers`, `chat-channels/identity`, `chat-channels/lifecycle`, `connection-setup/channel-setup`, `connection-setup/failure` | unreviewed / production / fixtures | 13 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the endpoint editor addition; this suite selects setup/access and locally simulated conversation states. Endpoint PATCH retains fields, but settings workspace-choice requests and default selection are not covered by these scenarios. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Inspected channel task-default controls, optional API fields, avatar rendering and matching fixture updates; live defaults inheritance and permission checks remain outside these stories. Catalog, ChooseAgent, Credentials, Access, Reconnect and ProviderOutageRecovery render shipped setup/detail states with simulated provider data. No live iMessage connection, delivery or recovery claim. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup](../../ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 18 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/External chat and email/Connections/Slack/Avatar in Settings](../../ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx) | `chat-channels/identity` | current / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. | -| [Apps, channels, and extensions/External chat and email/Connections/Slack/Communication in Settings](../../ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx) | `chat-channels/identity` | current / production / fixtures | 4 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. | -| [Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup](../../ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 21 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. | -| [Apps, channels, and extensions/External chat and email/Connections/Slack/Task tools](../../ui/storybook/stories/chat-channels/slack-tools.stories.tsx) | `chat-channels/conversation` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. | - -### Tool gateways and access profiles - -Tool exposure, client configuration, tokens, profiles, and activity. - -[Feature recipe](../feature-map/gateways-profiles.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Apps, channels, and extensions/Tool gateways and access profiles/Tools/Access profiles](../../ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx) | `gateways-profiles/profiles` | unreviewed / production / fixtures | 18 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps, channels, and extensions/Tool gateways and access profiles/Named gateway tokens](../../ui/storybook/stories/gateways-profiles/gateway-tokens.stories.tsx) | `gateways-profiles/tokens` | current / production / fixtures | 8 / 5 | Named, empty and expired token history; issuance pending/error/403/success and name-confirmed revocation. Tokens are fictional; real bearer expiry, scope and revocation need API verification. | -| [Apps, channels, and extensions/Tool gateways and access profiles/Tools/Gateways (PAP-11182)](../../ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx) | `gateways-profiles/gateway` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Manage connections](../../ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 9 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Consent](../../ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 25 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Device authorization](../../ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 7 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Start here](../../ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx) | `gateways-profiles/client-connect` | unreviewed / production / fixtures | 14 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Experimental setting](../../ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx) | `gateways-profiles/client-connect`, `instance-operations/configuration` | unreviewed / production / fixtures | 8 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. ToggleOnAndOff, ManagedByCloud and SaveFailedRollsBack mount production experimental settings with simulated saves. Only the assistant-connection flag is represented, not every instance setting. The recipe distinguishes process liveness from authenticated database readiness; these examples do not exercise that operator API boundary. | - -### Secrets and proposals - -Company/user credentials, grants, proposals, and vault import. - -[Feature recipe](../feature-map/secrets.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice](../../ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx) | `secrets/runtime-delivery`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. | -| [Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page](../../ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx) | `secrets/runtime-delivery`, `recovery/diagnosis` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements. | -| [Apps, channels, and extensions/Secrets and proposals/Product/Environment Variables Editor](../../ui/storybook/stories/secrets/environment-variables-editor.stories.tsx) | `secrets/runtime-delivery` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. | -| [Apps, channels, and extensions/Secrets and proposals/Proposal review](../../ui/storybook/stories/secrets/proposal-review.stories.tsx) | `secrets/proposals` | current / production / fixtures | 7 / 3 | Pending proposal, authority preflight block, list states and rejected proposal/rejection error. ProposalsTab and its dialogs are shipped; secret creation, values and grant authority are not exercised. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. | -| [Apps, channels, and extensions/Secrets and proposals/Product/Secrets](../../ui/storybook/stories/secrets/secrets.stories.tsx) | `secrets/company-secrets`, `secrets/vault-import` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. | -| [Apps, channels, and extensions/Secrets and proposals/Product/User secrets](../../ui/storybook/stories/secrets/user-secrets.stories.tsx) | `secrets/user-secrets` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. | - -### Plugins - -Installation/configuration, contributed pages/tools, and lifecycle. - -[Feature recipe](../feature-map/plugins.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Apps, channels, and extensions/Plugins/Configuration](../../ui/storybook/stories/plugins/plugin-configuration.stories.tsx) | `plugins/configuration` | current / production / fixtures | 6 / 3 | PluginSettings configuration route with hydrated values, read pending/unavailable and saved/error/403 responses. Real config storage and plugin worker validation are not proved. | -| [Apps, channels, and extensions/Plugins/Contributed routes](../../ui/storybook/stories/plugins/plugin-contributions.stories.tsx) | `plugins/contributions` | current / production / fixtures | 4 / 1 | Production PluginPage host with a registered fixture plugin component; pending/missing contribution and discovery failure. Discovery failure currently remains Loading; contribution contents are a fixture, not shipped plugin code. | -| [Apps, channels, and extensions/Plugins/Installation and lifecycle](../../ui/storybook/stories/plugins/plugin-management.stories.tsx) | `plugins/installation`, `plugins/lifecycle` | current / production / fixtures | 10 / 5 | PluginManager list states, install pending/error/success, disable and uninstall receipts. Local record transitions only; package loading and worker lifecycle require production verification. | - -## Automation and structured work - -### Routines, schedules, and triggers - -Definitions, variables, scheduled/webhook/manual runs, and history. - -[Feature recipe](../feature-map/routines.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)](../../ui/storybook/stories/routines/routine-detail-c.stories.tsx) | `routines/definition`, `routines/management`, `activity/routine-audit` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Activity mounts the shipped ActivitySection with fixture trigger/run/configuration events. This does not establish live routine execution or audit persistence. | -| [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab](../../ui/storybook/stories/routines/routine-secrets.stories.tsx) | `routines/definition`, `secrets/runtime-delivery` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. | -| [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks UX preview](../../ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx) | `routines/triggers` | unreviewed / production / fixtures | 21 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks](../../ui/storybook/stories/routines/routine-webhooks.stories.tsx) | `routines/triggers`, `routines/history`, `activity/routine-audit` | unreviewed / production / fixtures | 16 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Runs and Activity mount RoutineDetail with fixture execution tasks/events and play assertions. Scheduler execution, delivery and audit persistence are not live. | -| [Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines/routines-list-groups.stories.tsx) | `routines/definition`, `routines/management` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Automation and structured work/Routines, schedules, and triggers/Run now](../../ui/storybook/stories/routines/run-now.stories.tsx) | `routines/run-now` | current / production / fixtures | 8 / 4 | RoutineDetail manual-run dialog with required input, captured variables, pending/error/success and read states. Fictional dispatch receipt; real scheduling, coalescing, workspace authority and execution remain separate. | - -### Pipelines, review queues, and learnings - -Experimental stages, automation, items, review, and learning records. - -[Feature recipe](../feature-map/pipelines.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Automation and structured work/Pipelines, review queues, and learnings/Learnings](../../ui/storybook/stories/pipelines/learnings.stories.tsx) | `pipelines/learnings` | current / production / fixtures | 5 / 1 | Production Learnings feed renders a review_decided event plus loading/empty/error/403. Event provenance and durable audit records remain separate; this is not a new learning-record subsystem. | -| [Automation and structured work/Pipelines, review queues, and learnings/Items](../../ui/storybook/stories/pipelines/pipeline-board.stories.tsx) | `pipelines/items` | current / production / fixtures | 5 / 1 | Production Pipelines board with stages/items and loading/empty/error/403. Snapshot rows only; transitions, liveness, guards and automation execution remain separate. | -| [Automation and structured work/Pipelines, review queues, and learnings/Review queue](../../ui/storybook/stories/pipelines/review-queue.stories.tsx) | `pipelines/review` | current / production / fixtures | 7 / 3 | Production ReviewQueue with empty/loading/error/403, approval removal and failure recovery marked Needs attention. Fixture decisions do not prove real review leases, version checks or transitions. | -| [Automation and structured work/Pipelines, review queues, and learnings/Stage settings](../../ui/storybook/stories/pipelines/stage-settings.stories.tsx) | `pipelines/stages` | current / production / fixtures | 5 / 2 | Production PipelineSettings stage editor with filled configuration, no stages, pending/error/403. This pass renders the shipped controls; saved stage/automation changes remain production obligations. | - -### Cases - -Experimental structured fields, relationships, revisions, and task links. - -[Feature recipe](../feature-map/cases.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Automation and structured work/Cases/Browse and hierarchy](../../ui/storybook/stories/cases/case-browse.stories.tsx) | `cases/browse` | current / production / fixtures | 5 / 1 | Cases page with fixture parent/child records and loading/empty/error/403. Failed list queries currently use the shipped empty-case presentation. Responsive duplicate labels are accounted for; server filters and case mutations remain separate. | -| [Automation and structured work/Cases/Structure, history and task links](../../ui/storybook/stories/cases/case-detail.stories.tsx) | `cases/structure`, `cases/history`, `cases/task-links` | current / production / fixtures | 8 / 4 | CaseDetail hierarchy and activity, CaseFieldsPanel arbitrary/empty data and IssueCasesPanel reverse links. Fixture relations/events; document revision history and persisted links remain production obligations. | - -### Status cards - -Experimental summaries, watched work, refresh history, and settings. - -[Feature recipe](../feature-map/status-cards.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Automation and structured work/Status cards/Authoring, updates and archive](../../ui/storybook/stories/status-cards/status-card-states.stories.tsx) | `status-cards/authoring`, `status-cards/generation`, `status-cards/inspection`, `status-cards/archive` | current / production / fixtures | 17 / 10 | StatusCards board/drawer with current/stale/error/live setup, list states, create, refresh, inspection and archive/restoration. Mutable receipts and setup task ID are fixtures; no summarizer execution or revision-history parity is claimed. | - -## Oversight and operation - -### Costs and budgets - -Spend reports, scoped limits, incidents, hard stops, and resumption. - -[Feature recipe](../feature-map/budgets-costs.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Oversight and operation/Costs and budgets/Product/Budget & Finance](../../ui/storybook/stories/budgets-costs/budget-finance.stories.tsx) | `budgets-costs/cost-reporting`, `budgets-costs/budgets`, `budgets-costs/incidents` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. FullMatrix renders BudgetIncidentCard in warning, resolved, pending-approval and escalated hard-stop states. Resolution handlers are no-ops; budget relief and resumption remain unverified. The upstream budget UI distinguishes soft warnings from hard stops; hard incidents retain raise-and-resume and keep-paused controls. | -| [Oversight and operation/Costs and budgets/Resolve a budget incident](../../ui/storybook/stories/budgets-costs/budget-resolution.stories.tsx) | `budgets-costs/resolution` | current / production / fixtures | 10 / 6 | Shipped Costs budget tab with empty/read failures, invalid amount, raise-and-resume, keep-paused and write failure/pending. Fixture incident transitions only; real overlapping holds and hard stops remain separate. The upstream budget UI distinguishes soft warnings from hard stops; hard incidents retain raise-and-resume and keep-paused controls. | -| [Oversight and operation/Costs and budgets/Costs/Subscriptions](../../ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx) | `budgets-costs/cost-reporting`, `budgets-costs/budgets` | unreviewed / production / fixtures | 7 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The upstream budget UI distinguishes soft warnings from hard stops; hard incidents retain raise-and-resume and keep-paused controls. | - -### Dashboards and audit trails - -Company health, live work, activity, runs, routines, and timeline. - -[Feature recipe](../feature-map/activity.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)](../../ui/storybook/stories/activity/activity-feed.stories.tsx) | `activity/activity`, `gateways-profiles/activity` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx) | `activity/activity`, `gateways-profiles/activity` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Oversight and operation/Dashboards and audit trails/Product/Data Visualization & Misc](../../ui/storybook/stories/activity/data-viz-misc.stories.tsx) | `activity/overview` | unreviewed / production / fixtures | 21 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task. | -| [Oversight and operation/Dashboards and audit trails/Execution history](../../ui/storybook/stories/activity/run-audit.stories.tsx) | `activity/runs` | current / production / fixtures | 6 / 4 | AuditRuns list, completed receipt, empty/loading/failed/denied and no-match filter. Run records are fixture snapshots; no real execution or scoped audit proof. | -| [Oversight and operation/Dashboards and audit trails/Pages/Work Timeline](../../ui/storybook/stories/activity/work-timeline.stories.tsx) | `activity/timeline` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | - -### Navigation, profile, and announcements - -Sidebar state, favorites/recents, personal identity, and dismissals. - -[Feature recipe](../feature-map/navigation-preferences.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Oversight and operation/Navigation, profile, and announcements/Announcements/AnnouncementCard](../../ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx) | `navigation-preferences/announcements` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Oversight and operation/Navigation, profile, and announcements/Prototypes/Task detail/Mobile tabs](../../ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx) | `navigation-preferences/navigation` | proposed / prototype / fixtures | 4 / 2 | Local composition retained for its original design purpose; full production parity remains unreviewed. | -| [Oversight and operation/Navigation, profile, and announcements/Product/Navigation & Layout](../../ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx) | `navigation-preferences/navigation` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Oversight and operation/Navigation, profile, and announcements/Sidebar preferences](../../ui/storybook/stories/navigation-preferences/sidebar-preferences.stories.tsx) | `navigation-preferences/preferences` | current / production / fixtures | 5 / 1 | Production Sidebar inside PluginLauncherProvider with saved-order reads, pending/error/403 fallback and session-only section collapse. Favorites, recents and actual order persistence still need the recipe checks. | - -### Instance operations - -Installation, updates, service health, configuration, and backups. - -[Feature recipe](../feature-map/instance-operations.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Oversight and operation/Instance operations/Backup retention](../../ui/storybook/stories/instance-operations/backup-retention.stories.tsx) | `instance-operations/backup`, `instance-operations/configuration` | current / production / fixtures | 6 / 6 | Retention presets, initial read, loading, error, denial and pending/saved selection in InstanceGeneralSettings. Backup creation/restore and real settings authority remain production obligations. The recipe distinguishes process liveness from authenticated database readiness; these examples do not exercise that operator API boundary. The Codex branch relocates the liveness/readiness recipe paragraph to operator verification without changing its contract; this suite retains separate backup/restore and live readiness obligations. | -| [Oversight and operation/Instance operations/Product/Dev Ops Surfaces](../../ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx) | `instance-operations/server-service` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. The recipe distinguishes process liveness from authenticated database readiness; these examples do not exercise that operator API boundary. | - -### CLI/API and local worktrees - -Explicit context, resource commands, outputs, runs, and isolated instances. - -[Feature recipe](../feature-map/cli-operations.md) - -No primary story suite. Check capability lookup below for related examples; this does not imply a missing product feature. - - -## Contributor surfaces - -### Developer previews and diagnostic labs - -Design examples, interaction fixtures, performance checks; not production acceptance. - -[Feature recipe](../feature-map/developer-labs.md) - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Contributor surfaces/Developer previews and diagnostic labs/UX Labs/Converted Test Pages](../../ui/storybook/stories/developer-labs/ux-labs.stories.tsx) | `developer-labs/interaction-labs` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | - -## Foundations - -### Shared foundations and guides - -Shared components and contributor guidance outside the product feature index. - -| Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | -| --- | --- | --- | --- | --- | -| [Foundations/Components/Forms & Editors](../../ui/storybook/stories/foundations/forms-editors.stories.tsx) | `developer-labs/design` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Related design reference: demonstrates shared production controls and visual states in an isolated contributor fixture; retains its Foundations home. No product-journey or baseline comparison claim. | -| [Foundations/Primitive Matrix](../../ui/storybook/stories/foundations/foundations.stories.tsx) | `developer-labs/design` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Related design reference: demonstrates shared production controls and visual states in an isolated contributor fixture; retains its Foundations home. No product-journey or baseline comparison claim. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. | -| [Foundations/Primitive Coverage](../../ui/storybook/stories/foundations/primitives-coverage.stories.tsx) | `developer-labs/design` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Related design reference: demonstrates shared production controls and visual states in an isolated contributor fixture; retains its Foundations home. No product-journey or baseline comparison claim. | -| [Foundations/Status Language](../../ui/storybook/stories/foundations/status-language.stories.tsx) | `developer-labs/design` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. Related design reference: demonstrates shared production controls and visual states in an isolated contributor fixture; retains its Foundations home. No product-journey or baseline comparison claim. | -| [Overview/Storybook Guide](../../ui/storybook/stories/overview/overview.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / guide / static | 1 / 0 | Matches the upstream feature index and order, including features with no cataloged examples. Related suite links and classifications do not imply execution coverage. The generated upstream feature index was reconciled; example scope and classifications are retained. Reviewed the regenerated liveness capability description against the feature recipe; the guide remains a static index and does not prove live readiness. | - -## 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. - -- `onboarding/instance`: No cataloged story. -- `onboarding/company`: [Getting started and access/Onboarding and first work/Onboarding/Character](../../ui/storybook/stories/onboarding/onboarding-character.stories.tsx) (unreviewed) -- `onboarding/adapter`: [Getting started and access/Onboarding and first work/Onboarding/Agent arc](../../ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx) (unreviewed), [Getting started and access/Onboarding and first work/Onboarding/Connect a model](../../ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx) (historical) -- `onboarding/first-task`: [Getting started and access/Onboarding and first work/Onboarding/Agent arc](../../ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx) (unreviewed), [Getting started and access/Onboarding and first work/Onboarding/Connect a model](../../ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx) (historical) -- `onboarding/resume`: [Getting started and access/Onboarding and first work/Resume a saved draft](../../ui/storybook/stories/onboarding/resume-draft.stories.tsx) (current) -- `access/login`: [Getting started and access/Login, invitations, and access/Sign in](../../ui/storybook/stories/access/sign-in.stories.tsx) (current) -- `access/invitations`: [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components](../../ui/storybook/stories/agents/external-agent-invite/components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx) (unreviewed) -- `access/membership`: [Getting started and access/Login, invitations, and access/Organization membership](../../ui/storybook/stories/access/membership.stories.tsx) (current) -- `access/resources`: [Getting started and access/Login, invitations, and access/Private tasks/00 Review guide](../../ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/01 Creation](../../ui/storybook/stories/access/private-tasks/01-creation.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/02 Sharing](../../ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/03 Task actions](../../ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers](../../ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/05 Projects](../../ui/storybook/stories/access/private-tasks/05-projects.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages](../../ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/07 User stories](../../ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx) (unreviewed) -- `access/cli-auth`: [Getting started and access/Login, invitations, and access/CLI authorization](../../ui/storybook/stories/access/cli-authorization.stories.tsx) (current) -- `companies/selection`: [Getting started and access/Companies and portability/Selection and archived organizations](../../ui/storybook/stories/companies/company-selection.stories.tsx) (current) -- `companies/identity`: [Getting started and access/Companies and portability/Decision models/01 Settings](../../ui/storybook/stories/companies/decision-models/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/02 History](../../ui/storybook/stories/companies/decision-models/02-history.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/03 Journey](../../ui/storybook/stories/companies/decision-models/03-journey.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/01 Settings](../../ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/02 History](../../ui/storybook/stories/companies/fast-responses/02-history.stories.tsx) (current) -- `companies/decision-models`: [Getting started and access/Companies and portability/Decision models/01 Settings](../../ui/storybook/stories/companies/decision-models/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/02 History](../../ui/storybook/stories/companies/decision-models/02-history.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/03 Journey](../../ui/storybook/stories/companies/decision-models/03-journey.stories.tsx) (unreviewed) -- `companies/fast-responses`: [Getting started and access/Companies and portability/Fast responses/01 Settings](../../ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/02 History](../../ui/storybook/stories/companies/fast-responses/02-history.stories.tsx) (current) -- `companies/archive`: [Getting started and access/Companies and portability/Selection and archived organizations](../../ui/storybook/stories/companies/company-selection.stories.tsx) (current) -- `companies/portability`: [Getting started and access/Companies and portability/Import preview](../../ui/storybook/stories/companies/company-import.stories.tsx) (current) -- `tasks/create`: [Tasks and conversations/Task creation and lifecycle/Composer/Add menu](../../ui/storybook/stories/tasks/composer-add-menu.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker](../../ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker](../../ui/storybook/stories/tasks/composer-model-picker.stories.tsx) (mixed), [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Components/Entity pickers/Mobile](../../ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Composer/New task](../../ui/storybook/stories/tasks/new-task-composer.stories.tsx) (current), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide](../../ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components](../../ui/storybook/stories/agents/primary-agent/01-components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar](../../ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents](../../ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task](../../ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat](../../ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys](../../ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation](../../ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx) (unreviewed) -- `tasks/organize`: [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Issue Management](../../ui/storybook/stories/tasks/issue-management.stories.tsx) (unreviewed) -- `tasks/properties`: [Tasks and conversations/Task creation and lifecycle/External Objects](../../ui/storybook/stories/tasks/external-objects.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Issue Management](../../ui/storybook/stories/tasks/issue-management.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/00 Review guide](../../ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/01 Creation](../../ui/storybook/stories/access/private-tasks/01-creation.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/02 Sharing](../../ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/03 Task actions](../../ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers](../../ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/05 Projects](../../ui/storybook/stories/access/private-tasks/05-projects.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages](../../ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/07 User stories](../../ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx) (unreviewed) -- `tasks/discussion`: [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity](../../ui/storybook/stories/workspaces/browser-use-activity.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer](../../ui/storybook/stories/workspaces/browser-use-footer.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel](../../ui/storybook/stories/workspaces/browser-use.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Chat & Comments](../../ui/storybook/stories/tasks/chat-comments.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Tasks/Completed activity preview](../../ui/storybook/stories/tasks/completed-activity.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview](../../ui/storybook/stories/tasks/runner-activity.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes](../../ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Task chat/Mobile streaming follow](../../ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Task chat/System notice](../../ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Tasks/Context notices](../../ui/storybook/stories/tasks/task-context-notices.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/00 Review guide](../../ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/01 Components](../../ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/02 Mixed-author journey](../../ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx) (unreviewed) -- `tasks/completion`: [Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff](../../ui/storybook/stories/tasks/successful-run-handoff.stories.tsx) (unreviewed) -- `task-coordination/delegation`: [Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions](../../ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx) (unreviewed), [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task](../../ui/storybook/stories/task-coordination/originating-tasks.stories.tsx) (unreviewed), [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx) (unreviewed) -- `task-coordination/dependencies`: [Projects and execution/Recovery/Product/Issue/Blocked notice](../../ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx) (unreviewed), [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx) (unreviewed) -- `task-coordination/signoff`: [Tasks and conversations/Delegation, dependencies, and signoff/Product/Decisions/Stalled review actions](../../ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx) (unreviewed) -- `task-coordination/tree-control`: [Tasks and conversations/Delegation, dependencies, and signoff/Product/Issue Monitor surfaces](../../ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx) (unreviewed), [Tasks and conversations/Delegation, dependencies, and signoff/Product/Task Watchdog surfaces](../../ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx) (unreviewed) -- `inbox-search/views`: [Tasks and conversations/Inbox, decisions, and search/Personal task views](../../ui/storybook/stories/inbox-search/inbox-views.stories.tsx) (current) -- `inbox-search/triage`: [Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab](../../ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx) (unreviewed) -- `inbox-search/decisions`: [Tasks and conversations/Inbox, decisions, and search/Decisions/DecisionCard](../../ui/storybook/stories/inbox-search/decision-card.stories.tsx) (unreviewed), [Tasks and conversations/Inbox, decisions, and search/Pages/Decisions Desk](../../ui/storybook/stories/inbox-search/decisions-desk.stories.tsx) (unreviewed), [Tasks and conversations/Inbox, decisions, and search/Pages/Decisions](../../ui/storybook/stories/inbox-search/what-needs-me.stories.tsx) (unreviewed) -- `inbox-search/search`: [Tasks and conversations/Inbox, decisions, and search/Product/Search & Command K](../../ui/storybook/stories/inbox-search/search.stories.tsx) (unreviewed) -- `inbox-search/toasts`: [Tasks and conversations/Inbox, decisions, and search/Personal task notifications](../../ui/storybook/stories/inbox-search/personal-task-toasts.stories.tsx) (current) -- `agent-chat/discovery`: [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx) (unreviewed), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat](../../ui/storybook/stories/agent-chat/agent-chat.stories.tsx) (mixed), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx) (current), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry](../../ui/storybook/stories/agent-chat/chat-entry.stories.tsx) (historical), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide](../../ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components](../../ui/storybook/stories/agents/primary-agent/01-components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar](../../ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents](../../ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task](../../ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat](../../ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys](../../ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation](../../ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx) (unreviewed) -- `agent-chat/history`: [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx) (unreviewed), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat](../../ui/storybook/stories/agent-chat/agent-chat.stories.tsx) (mixed), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx) (current), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry](../../ui/storybook/stories/agent-chat/chat-entry.stories.tsx) (historical) -- `agent-chat/handoff`: [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat](../../ui/storybook/stories/agent-chat/agent-chat.stories.tsx) (mixed) -- `agent-chat/conference-room`: [Tasks and conversations/Agent conversations and project handoff/Conference Room](../../ui/storybook/stories/agent-chat/conference-room.stories.tsx) (current) -- `questions-and-approvals/questions`: [Tasks and conversations/Questions and approvals/Composer/Question flow](../../ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Composer/Interaction above composer](../../ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx) (current) -- `questions-and-approvals/dismiss-and-reopen`: [Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx) (unreviewed) -- `questions-and-approvals/confirmations`: [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Composer/Interaction above composer](../../ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx) (current) -- `questions-and-approvals/plan-review`: [Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions](../../ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) (unreviewed) -- `questions-and-approvals/audience`: [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Composer/Interaction above composer](../../ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx) (current) -- `questions-and-approvals/governance`: [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) (unreviewed) -- `questions-and-approvals/tool-review`: [Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews](../../ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx) (unreviewed) -- `questions-and-approvals/continuation`: [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) (unreviewed) -- `steering/queue`: [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) (current) -- `steering/edit-order-discard`: [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) (current) -- `steering/steer`: [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) (current) -- `steering/interrupt`: [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) (current), [Tasks and conversations/Steering and queued messages/Surfaces/Interrupt Handoff](../../ui/storybook/stories/steering/interrupt-handoff.stories.tsx) (unreviewed) -- `steering/stop-and-pause`: [Tasks and conversations/Steering and queued messages/Composer/Paused task takeover](../../ui/storybook/stories/steering/paused-composer.stories.tsx) (historical), [Tasks and conversations/Steering and queued messages/Composer/Execution controls](../../ui/storybook/stories/steering/task-execution-controls.stories.tsx) (current) -- `steering/drafts`: [Tasks and conversations/Steering and queued messages/Draft recovery](../../ui/storybook/stories/steering/composer-draft-recovery.stories.tsx) (current) -- `steering/approval-queue`: [Tasks and conversations/Steering and queued messages/Accepted response delivery](../../ui/storybook/stories/steering/durable-response-queue.stories.tsx) (current) -- `documents-artifacts/documents`: [Tasks and conversations/Documents, attachments, and work products/Document revisions](../../ui/storybook/stories/documents-artifacts/document-revisions.stories.tsx) (current) -- `documents-artifacts/annotations`: [Tasks and conversations/Documents, attachments, and work products/Product/Documents/Annotations](../../ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Product/Document Comments](../../ui/storybook/stories/documents-artifacts/document-comments.stories.tsx) (unreviewed) -- `documents-artifacts/attachments`: [Tasks and conversations/Documents, attachments, and work products/Artifact upload/01 Artifacts pane](../../ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Artifact upload/02 Paused task journey](../../ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Components/CSV File Tab](../../ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Components/File Viewer Sheet](../../ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview](../../ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace](../../ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey](../../ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Tasks/Text file tabs](../../ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx) (unreviewed) -- `documents-artifacts/work-products`: [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Commit](../../ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Data](../../ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Document](../../ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/File](../../ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Image](../../ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Link preview](../../ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Pull request](../../ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Video](../../ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts](../../ui/storybook/stories/documents-artifacts/artifacts.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Task Chat/Rich Work Product Cards](../../ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery](../../ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx) (unreviewed) -- `documents-artifacts/library`: [Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts](../../ui/storybook/stories/documents-artifacts/artifacts.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery](../../ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx) (unreviewed) -- `agents/hire`: [Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections](../../ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components](../../ui/storybook/stories/agents/external-agent-invite/components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/New agent](../../ui/storybook/stories/agents/new-agent-onboarding.stories.tsx) (historical), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Codex runner/Creation](../../ui/storybook/stories/agents/codex-runner/creation.stories.tsx) (current) -- `agents/instructions`: [Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail](../../ui/storybook/stories/agents/agent-detail.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Persistent files](../../ui/storybook/stories/agents/agent-files.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management](../../ui/storybook/stories/agents/agent-management.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh](../../ui/storybook/stories/agents/agent-settings-redesign.stories.tsx) (mixed), [Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-setup/connection-instructions.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Memory](../../ui/storybook/stories/connection-setup/memory-connectors.stories.tsx) (unreviewed) -- `agents/organization`: [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages](../../ui/storybook/stories/agents/agent-persona-pages.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas](../../ui/storybook/stories/agents/agent-personas.stories.tsx) (unreviewed) -- `agents/primary-agent`: [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide](../../ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components](../../ui/storybook/stories/agents/primary-agent/01-components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar](../../ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents](../../ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task](../../ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat](../../ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys](../../ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation](../../ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx) (unreviewed) -- `agents/lifecycle`: [Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail](../../ui/storybook/stories/agents/agent-detail.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management](../../ui/storybook/stories/agents/agent-management.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh](../../ui/storybook/stories/agents/agent-settings-redesign.stories.tsx) (mixed) -- `agents/built-in`: [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Built-in Agents](../../ui/storybook/stories/agents/built-in-agents.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Summaries/SummarySlotCard](../../ui/storybook/stories/agents/summary-slot-card.stories.tsx) (unreviewed) -- `runs-adapters/availability`: [Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker](../../ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker](../../ui/storybook/stories/tasks/composer-model-picker.stories.tsx) (mixed) -- `runs-adapters/validation`: [Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections](../../ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx) (current), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Usage limits](../../ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Review](../../ui/storybook/stories/runs-adapters/ai-connections.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host](../../ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Connection pools](../../ui/storybook/stories/runs-adapters/connection-pools.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner](../../ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/07 Subscription sign-in](../../ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/00 Overview](../../ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/01 Onboarding](../../ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/02 Connect](../../ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/03 Agent](../../ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/04 Manage](../../ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/05 Recovery](../../ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/06 Production components](../../ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Codex runner/Creation](../../ui/storybook/stories/agents/codex-runner/creation.stories.tsx) (current) -- `runs-adapters/runs`: [Tasks and conversations/Task creation and lifecycle/Product/Chat & Comments](../../ui/storybook/stories/tasks/chat-comments.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Tasks/Completed activity preview](../../ui/storybook/stories/tasks/completed-activity.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview](../../ui/storybook/stories/tasks/runner-activity.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes](../../ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx) (unreviewed) -- `runs-adapters/session`: [Agents and reusable capabilities/Runs, harnesses, and model accounts/Composer/Session goals](../../ui/storybook/stories/runs-adapters/session-goals.stories.tsx) (unreviewed) -- `skills/discovery`: [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey](../../ui/storybook/stories/skills/github-skills-journey.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills](../../ui/storybook/stories/skills/github-synced-skills.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages](../../ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress](../../ui/storybook/stories/skills/skill-import-progress.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail](../../ui/storybook/stories/skills/skills-store-detail.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Discovery grid](../../ui/storybook/stories/skills/skills-store-discovery.stories.tsx) (unreviewed) -- `skills/authoring`: [Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/EditACopy](../../ui/storybook/stories/skills/fork-skill-flow.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Product/Skill Studio · FrontmatterPanel](../../ui/storybook/stories/skills/frontmatter-panel.stories.tsx) (unreviewed) -- `skills/versions`: [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey](../../ui/storybook/stories/skills/github-skills-journey.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills](../../ui/storybook/stories/skills/github-synced-skills.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages](../../ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress](../../ui/storybook/stories/skills/skill-import-progress.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail](../../ui/storybook/stories/skills/skills-store-detail.stories.tsx) (unreviewed) -- `skills/policy`: [Agents and reusable capabilities/Skills and Skill Studio/Agent Skills/AgentSkillRow](../../ui/storybook/stories/skills/agent-skill-row.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/QA / Agent skills edge states](../../ui/storybook/stories/skills/agent-skills-edge.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/AgentsUsingSkill](../../ui/storybook/stories/skills/agents-using-skill.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey](../../ui/storybook/stories/skills/github-skills-journey.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Product/Skills/Policy surfaces](../../ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail](../../ui/storybook/stories/skills/skills-store-detail.stories.tsx) (unreviewed) -- `skills/testing`: [Agents and reusable capabilities/Skills and Skill Studio/Test runs](../../ui/storybook/stories/skills/skill-test-runs.stories.tsx) (current) -- `teams/discovery`: [Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog](../../ui/storybook/stories/teams/team-catalog.stories.tsx) (unreviewed) -- `teams/preview`: [Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog](../../ui/storybook/stories/teams/team-catalog.stories.tsx) (unreviewed) -- `teams/install`: [Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog](../../ui/storybook/stories/teams/team-catalog.stories.tsx) (unreviewed) -- `teams/configuration`: [Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog](../../ui/storybook/stories/teams/team-catalog.stories.tsx) (unreviewed) -- `projects/lifecycle`: [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/05 Projects](../../ui/storybook/stories/access/private-tasks/05-projects.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages](../../ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Projects and execution/Projects and repositories/Product/Projects Goals Workspaces](../../ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx) (unreviewed) -- `projects/task-context`: [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task](../../ui/storybook/stories/task-coordination/originating-tasks.stories.tsx) (unreviewed) -- `projects/repositories`: [Projects and execution/Projects and repositories/Proposals/Project repos/New project](../../ui/storybook/stories/projects/new-project-repos.stories.tsx) (proposed), [Projects and execution/Projects and repositories/Proposals/Project repos/Configuration](../../ui/storybook/stories/projects/project-repos-configuration.stories.tsx) (proposed) -- `projects/defaults`: [Projects and execution/Projects and repositories/Workspaces/Project runtime provision command](../../ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx) (unreviewed) -- `goals/hierarchy`: [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) (unreviewed), [Projects and execution/Projects and repositories/Product/Projects Goals Workspaces](../../ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx) (unreviewed) -- `goals/alignment`: [Projects and execution/Goals and work alignment/Aligned work and navigation](../../ui/storybook/stories/goals/goal-alignment.stories.tsx) (current) -- `goals/navigation`: [Projects and execution/Goals and work alignment/Aligned work and navigation](../../ui/storybook/stories/goals/goal-alignment.stories.tsx) (current) -- `workspaces/binding`: [Tasks and conversations/Task creation and lifecycle/Composer/New task](../../ui/storybook/stories/tasks/new-task-composer.stories.tsx) (current), [Projects and execution/Projects and repositories/Product/Projects Goals Workspaces](../../ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Components/SearchableSelect/Workspace picker](../../ui/storybook/stories/workspaces/searchable-select.stories.tsx) (unreviewed) -- `workspaces/provisioning`: [Projects and execution/Projects and repositories/Workspaces/Project runtime provision command](../../ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Workspaces/Runtime provisioning status](../../ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx) (unreviewed) -- `workspaces/services`: [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity](../../ui/storybook/stories/workspaces/browser-use-activity.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer](../../ui/storybook/stories/workspaces/browser-use-footer.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel](../../ui/storybook/stories/workspaces/browser-use.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Workspaces/Service control bar](../../ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx) (unreviewed) -- `workspaces/files-git`: [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview](../../ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace](../../ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey](../../ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Issue/Workspace File Browser](../../ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx) (unreviewed) -- `workspaces/closure`: [Projects and execution/Workspaces, services, and files/Close readiness](../../ui/storybook/stories/workspaces/workspace-close.stories.tsx) (current) -- `execution-environments/configuration`: [Projects and execution/Execution environments/Configuration, capabilities, and probes](../../ui/storybook/stories/execution-environments/environment-states.stories.tsx) (current) -- `execution-environments/capabilities`: [Projects and execution/Execution environments/Configuration, capabilities, and probes](../../ui/storybook/stories/execution-environments/environment-states.stories.tsx) (current) -- `execution-environments/probe`: [Projects and execution/Execution environments/Configuration, capabilities, and probes](../../ui/storybook/stories/execution-environments/environment-states.stories.tsx) (current) -- `execution-environments/assignment`: [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management](../../ui/storybook/stories/agents/agent-management.stories.tsx) (unreviewed) -- `execution-environments/images`: [Projects and execution/Execution environments/Custom images](../../ui/storybook/stories/execution-environments/custom-images.stories.tsx) (current) -- `recovery/diagnosis`: [Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx) (unreviewed), [Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab](../../ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx) (unreviewed), [Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice](../../ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx) (unreviewed), [Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page](../../ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx) (unreviewed), [Projects and execution/Recovery/Task chat/Recovery notice](../../ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx) (unreviewed), [Projects and execution/Recovery/Tasks/Execution recovery](../../ui/storybook/stories/recovery/execution-recovery.stories.tsx) (unreviewed), [Projects and execution/Recovery/Product/Issue/Blocked notice](../../ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx) (unreviewed), [Projects and execution/Recovery/Design previews/Recovery notice](../../ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx) (current), [Projects and execution/Recovery/Paperclip/Source Issue Recovery](../../ui/storybook/stories/recovery/source-issue-recovery.stories.tsx) (unreviewed), [Projects and execution/Recovery/Paperclip/Source-resolved Fold](../../ui/storybook/stories/recovery/source-resolved-fold.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff](../../ui/storybook/stories/tasks/successful-run-handoff.stories.tsx) (unreviewed) -- `recovery/bounded-continuation`: [Projects and execution/Recovery/Tasks/Model capacity retry](../../ui/storybook/stories/recovery/model-capacity-retry.stories.tsx) (unreviewed), [Projects and execution/Recovery/Product/Issue Scheduled retry surfaces](../../ui/storybook/stories/recovery/scheduled-retry.stories.tsx) (unreviewed) -- `recovery/source-action`: [Projects and execution/Recovery/Design previews/Recovery notice](../../ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx) (current), [Projects and execution/Recovery/Paperclip/Source Issue Recovery](../../ui/storybook/stories/recovery/source-issue-recovery.stories.tsx) (unreviewed), [Projects and execution/Recovery/Paperclip/Source-resolved Fold](../../ui/storybook/stories/recovery/source-resolved-fold.stories.tsx) (unreviewed), [Projects and execution/Recovery/Workspace finalization recovery/01 Notice](../../ui/storybook/stories/recovery/workspace-finalization-recovery/01-notice.stories.tsx) (current), [Projects and execution/Recovery/Workspace finalization recovery/02 Task journey](../../ui/storybook/stories/recovery/workspace-finalization-recovery/02-task-journey.stories.tsx) (unreviewed) -- `recovery/exhaustion`: [Projects and execution/Recovery/Exhaustion and user decisions](../../ui/storybook/stories/recovery/recovery-gap-states.stories.tsx) (current) -- `recovery/workspace`: [Projects and execution/Recovery/Workspace branch recovery/01 Repair card](../../ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx) (unreviewed), [Projects and execution/Recovery/Workspace branch recovery/02 Task journey](../../ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx) (unreviewed), [Projects and execution/Recovery/Workspace finalization recovery/01 Notice](../../ui/storybook/stories/recovery/workspace-finalization-recovery/01-notice.stories.tsx) (current), [Projects and execution/Recovery/Workspace finalization recovery/02 Task journey](../../ui/storybook/stories/recovery/workspace-finalization-recovery/02-task-journey.stories.tsx) (unreviewed) -- `recovery/unknown-outcome`: [Projects and execution/Recovery/Exhaustion and user decisions](../../ui/storybook/stories/recovery/recovery-gap-states.stories.tsx) (current) -- `recovery/user-continuation`: [Tasks and conversations/Steering and queued messages/Accepted response delivery](../../ui/storybook/stories/steering/durable-response-queue.stories.tsx) (current) -- `recovery/reconnect`: [Projects and execution/Recovery/App/Connection recovery](../../ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx) (unreviewed) -- `connection-setup/catalog`: [Apps, channels, and extensions/Connection setup/Apps/Canonical icon registry](../../ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Catalog source selection](../../ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx) (proposed), [Apps, channels, and extensions/Connection setup/Apps/Connect discoverability (PAP-11091)](../../ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host](../../ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx) (unreviewed) -- `connection-setup/identity-and-access`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Provider choice](../../ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connect name at create time (PAP-11283)](../../ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Reviews/PAP-17835 Personal connection identity](../../ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx) (unreviewed) -- `connection-setup/credentials`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Connections/Browser Use Cloud/Settings](../../ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx) (current), [Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-setup/connection-instructions.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Enterpret connector](../../ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Memory](../../ui/storybook/stories/connection-setup/memory-connectors.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx) (unreviewed) -- `connection-setup/handoff`: [Apps, channels, and extensions/Connection setup/Apps/Managed Cloud OAuth handoff](../../ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx) (unreviewed) -- `connection-setup/draft-recovery`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) (unreviewed) -- `connection-setup/task-request`: [Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews](../../ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Connections/In-task connections](../../ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx) (unreviewed) -- `connection-setup/channel-setup`: [Apps, channels, and extensions/Connection setup/Components/Agent setup prompt](../../ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/AgentMail setup](../../ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot](../../ui/storybook/stories/chat-channels/github-connections.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup](../../ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup](../../ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx) (unreviewed) -- `connection-setup/failure`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Enterpret connector](../../ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx) (unreviewed) -- `app-permissions/agent-access`: [Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed](../../ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx) (unreviewed) -- `app-permissions/action-policy`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard](../../ui/storybook/stories/app-permissions/action-card.stories.tsx) (unreviewed), [Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test](../../ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx) (unreviewed), [Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed](../../ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx) (unreviewed) -- `app-permissions/catalog-change`: [Apps, channels, and extensions/App access and action permissions/Review newly discovered actions](../../ui/storybook/stories/app-permissions/catalog-review.stories.tsx) (current) -- `app-permissions/test-action`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard](../../ui/storybook/stories/app-permissions/action-card.stories.tsx) (unreviewed), [Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test](../../ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx) (unreviewed) -- `app-permissions/account-maintenance`: [Apps, channels, and extensions/App access and action permissions/Apps/Managed accounts](../../ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx) (current) -- `chat-channels/providers`: [Apps, channels, and extensions/External chat and email/Connections/AgentMail setup](../../ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Chat connection actions](../../ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management](../../ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes](../../ui/storybook/stories/chat-channels/github-chat.stories.tsx) (historical), [Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot](../../ui/storybook/stories/chat-channels/github-connections.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup](../../ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup](../../ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx) (unreviewed) -- `chat-channels/identity`: [Apps, channels, and extensions/External chat and email/Connections/Chat management](../../ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Avatar in Settings](../../ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx) (current), [Apps, channels, and extensions/External chat and email/Connections/Slack/Communication in Settings](../../ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx) (current) -- `chat-channels/conversation`: [Apps, channels, and extensions/External chat and email/Connections/AgentMail tasks](../../ui/storybook/stories/chat-channels/agentmail.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Chat management](../../ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management](../../ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes](../../ui/storybook/stories/chat-channels/github-chat.stories.tsx) (historical), [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Task tools](../../ui/storybook/stories/chat-channels/slack-tools.stories.tsx) (unreviewed) -- `chat-channels/attachments`: [Apps, channels, and extensions/External chat and email/Task-linked files](../../ui/storybook/stories/chat-channels/channel-attachments.stories.tsx) (current) -- `chat-channels/lifecycle`: [Apps, channels, and extensions/External chat and email/Connections/AgentMail settings](../../ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Chat management](../../ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) (unreviewed) -- `gateways-profiles/gateway`: [Apps, channels, and extensions/Tool gateways and access profiles/Tools/Gateways (PAP-11182)](../../ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx) (unreviewed) -- `gateways-profiles/profiles`: [Apps, channels, and extensions/Tool gateways and access profiles/Tools/Access profiles](../../ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx) (unreviewed) -- `gateways-profiles/client-connect`: [Apps, channels, and extensions/Connection setup/Components/Agent setup prompt](../../ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner](../../ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Manage connections](../../ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx) (current), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Consent](../../ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx) (current), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Device authorization](../../ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx) (current), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Start here](../../ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx) (unreviewed), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Experimental setting](../../ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx) (unreviewed) -- `gateways-profiles/tokens`: [Apps, channels, and extensions/Tool gateways and access profiles/Named gateway tokens](../../ui/storybook/stories/gateways-profiles/gateway-tokens.stories.tsx) (current) -- `gateways-profiles/activity`: [Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)](../../ui/storybook/stories/activity/activity-feed.stories.tsx) (unreviewed), [Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx) (unreviewed) -- `secrets/company-secrets`: [Apps, channels, and extensions/Secrets and proposals/Product/Secrets](../../ui/storybook/stories/secrets/secrets.stories.tsx) (unreviewed) -- `secrets/user-secrets`: [Apps, channels, and extensions/Secrets and proposals/Product/User secrets](../../ui/storybook/stories/secrets/user-secrets.stories.tsx) (unreviewed) -- `secrets/proposals`: [Apps, channels, and extensions/Secrets and proposals/Proposal review](../../ui/storybook/stories/secrets/proposal-review.stories.tsx) (current) -- `secrets/vault-import`: [Apps, channels, and extensions/Secrets and proposals/Product/Secrets](../../ui/storybook/stories/secrets/secrets.stories.tsx) (unreviewed) -- `secrets/runtime-delivery`: [Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice](../../ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx) (unreviewed), [Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page](../../ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx) (unreviewed), [Apps, channels, and extensions/Secrets and proposals/Product/Environment Variables Editor](../../ui/storybook/stories/secrets/environment-variables-editor.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab](../../ui/storybook/stories/routines/routine-secrets.stories.tsx) (unreviewed) -- `plugins/installation`: [Apps, channels, and extensions/Plugins/Installation and lifecycle](../../ui/storybook/stories/plugins/plugin-management.stories.tsx) (current) -- `plugins/configuration`: [Apps, channels, and extensions/Plugins/Configuration](../../ui/storybook/stories/plugins/plugin-configuration.stories.tsx) (current) -- `plugins/contributions`: [Apps, channels, and extensions/Plugins/Contributed routes](../../ui/storybook/stories/plugins/plugin-contributions.stories.tsx) (current) -- `plugins/lifecycle`: [Apps, channels, and extensions/Plugins/Installation and lifecycle](../../ui/storybook/stories/plugins/plugin-management.stories.tsx) (current) -- `routines/definition`: [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)](../../ui/storybook/stories/routines/routine-detail-c.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab](../../ui/storybook/stories/routines/routine-secrets.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines/routines-list-groups.stories.tsx) (unreviewed) -- `routines/triggers`: [Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks UX preview](../../ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks](../../ui/storybook/stories/routines/routine-webhooks.stories.tsx) (unreviewed) -- `routines/run-now`: [Automation and structured work/Routines, schedules, and triggers/Run now](../../ui/storybook/stories/routines/run-now.stories.tsx) (current) -- `routines/history`: [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks](../../ui/storybook/stories/routines/routine-webhooks.stories.tsx) (unreviewed) -- `routines/management`: [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)](../../ui/storybook/stories/routines/routine-detail-c.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines/routines-list-groups.stories.tsx) (unreviewed) -- `pipelines/stages`: [Automation and structured work/Pipelines, review queues, and learnings/Stage settings](../../ui/storybook/stories/pipelines/stage-settings.stories.tsx) (current) -- `pipelines/items`: [Automation and structured work/Pipelines, review queues, and learnings/Items](../../ui/storybook/stories/pipelines/pipeline-board.stories.tsx) (current) -- `pipelines/review`: [Automation and structured work/Pipelines, review queues, and learnings/Review queue](../../ui/storybook/stories/pipelines/review-queue.stories.tsx) (current) -- `pipelines/learnings`: [Automation and structured work/Pipelines, review queues, and learnings/Learnings](../../ui/storybook/stories/pipelines/learnings.stories.tsx) (current) -- `cases/browse`: [Automation and structured work/Cases/Browse and hierarchy](../../ui/storybook/stories/cases/case-browse.stories.tsx) (current) -- `cases/structure`: [Automation and structured work/Cases/Structure, history and task links](../../ui/storybook/stories/cases/case-detail.stories.tsx) (current) -- `cases/history`: [Automation and structured work/Cases/Structure, history and task links](../../ui/storybook/stories/cases/case-detail.stories.tsx) (current) -- `cases/task-links`: [Automation and structured work/Cases/Structure, history and task links](../../ui/storybook/stories/cases/case-detail.stories.tsx) (current) -- `status-cards/authoring`: [Automation and structured work/Status cards/Authoring, updates and archive](../../ui/storybook/stories/status-cards/status-card-states.stories.tsx) (current) -- `status-cards/generation`: [Automation and structured work/Status cards/Authoring, updates and archive](../../ui/storybook/stories/status-cards/status-card-states.stories.tsx) (current) -- `status-cards/inspection`: [Automation and structured work/Status cards/Authoring, updates and archive](../../ui/storybook/stories/status-cards/status-card-states.stories.tsx) (current) -- `status-cards/archive`: [Automation and structured work/Status cards/Authoring, updates and archive](../../ui/storybook/stories/status-cards/status-card-states.stories.tsx) (current) -- `budgets-costs/cost-reporting`: [Oversight and operation/Costs and budgets/Product/Budget & Finance](../../ui/storybook/stories/budgets-costs/budget-finance.stories.tsx) (unreviewed), [Oversight and operation/Costs and budgets/Costs/Subscriptions](../../ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/01 Settings](../../ui/storybook/stories/companies/decision-models/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/02 History](../../ui/storybook/stories/companies/decision-models/02-history.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/03 Journey](../../ui/storybook/stories/companies/decision-models/03-journey.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/01 Settings](../../ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/02 History](../../ui/storybook/stories/companies/fast-responses/02-history.stories.tsx) (current) -- `budgets-costs/budgets`: [Oversight and operation/Costs and budgets/Product/Budget & Finance](../../ui/storybook/stories/budgets-costs/budget-finance.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) (unreviewed), [Oversight and operation/Costs and budgets/Costs/Subscriptions](../../ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx) (unreviewed) -- `budgets-costs/incidents`: [Oversight and operation/Costs and budgets/Product/Budget & Finance](../../ui/storybook/stories/budgets-costs/budget-finance.stories.tsx) (unreviewed) -- `budgets-costs/resolution`: [Oversight and operation/Costs and budgets/Resolve a budget incident](../../ui/storybook/stories/budgets-costs/budget-resolution.stories.tsx) (current) -- `activity/overview`: [Oversight and operation/Dashboards and audit trails/Product/Data Visualization & Misc](../../ui/storybook/stories/activity/data-viz-misc.stories.tsx) (unreviewed) -- `activity/activity`: [Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)](../../ui/storybook/stories/activity/activity-feed.stories.tsx) (unreviewed), [Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) (unreviewed) -- `activity/runs`: [Oversight and operation/Dashboards and audit trails/Execution history](../../ui/storybook/stories/activity/run-audit.stories.tsx) (current) -- `activity/routine-audit`: [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)](../../ui/storybook/stories/routines/routine-detail-c.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks](../../ui/storybook/stories/routines/routine-webhooks.stories.tsx) (unreviewed) -- `activity/timeline`: [Oversight and operation/Dashboards and audit trails/Pages/Work Timeline](../../ui/storybook/stories/activity/work-timeline.stories.tsx) (unreviewed) -- `navigation-preferences/navigation`: [Oversight and operation/Navigation, profile, and announcements/Prototypes/Task detail/Mobile tabs](../../ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx) (proposed), [Oversight and operation/Navigation, profile, and announcements/Product/Navigation & Layout](../../ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx) (unreviewed) -- `navigation-preferences/preferences`: [Oversight and operation/Navigation, profile, and announcements/Sidebar preferences](../../ui/storybook/stories/navigation-preferences/sidebar-preferences.stories.tsx) (current) -- `navigation-preferences/profile`: [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages](../../ui/storybook/stories/agents/agent-persona-pages.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas](../../ui/storybook/stories/agents/agent-personas.stories.tsx) (unreviewed) -- `navigation-preferences/announcements`: [Oversight and operation/Navigation, profile, and announcements/Announcements/AnnouncementCard](../../ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx) (unreviewed) -- `navigation-preferences/fallbacks`: No cataloged story. -- `instance-operations/install-update`: No cataloged story. -- `instance-operations/server-service`: [Oversight and operation/Instance operations/Product/Dev Ops Surfaces](../../ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx) (unreviewed) -- `instance-operations/configuration`: [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Experimental setting](../../ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx) (unreviewed), [Oversight and operation/Instance operations/Backup retention](../../ui/storybook/stories/instance-operations/backup-retention.stories.tsx) (current) -- `instance-operations/diagnostics`: No cataloged story. -- `instance-operations/backup`: [Oversight and operation/Instance operations/Backup retention](../../ui/storybook/stories/instance-operations/backup-retention.stories.tsx) (current) -- `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. -- `developer-labs/design`: [Foundations/Components/Forms & Editors](../../ui/storybook/stories/foundations/forms-editors.stories.tsx) (unreviewed), [Foundations/Primitive Matrix](../../ui/storybook/stories/foundations/foundations.stories.tsx) (unreviewed), [Foundations/Primitive Coverage](../../ui/storybook/stories/foundations/primitives-coverage.stories.tsx) (unreviewed), [Foundations/Status Language](../../ui/storybook/stories/foundations/status-language.stories.tsx) (unreviewed) -- `developer-labs/interaction-labs`: [Contributor surfaces/Developer previews and diagnostic labs/UX Labs/Converted Test Pages](../../ui/storybook/stories/developer-labs/ux-labs.stories.tsx) (unreviewed) -- `developer-labs/performance`: No cataloged story. -- `developer-labs/route-gates`: No cataloged story. diff --git a/maps/storybook-map/README.md b/maps/storybook-map/README.md index 77e90a39384..40d10b62213 100644 --- a/maps/storybook-map/README.md +++ b/maps/storybook-map/README.md @@ -1,118 +1,100 @@ # 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. +Browse the [published feature guide](https://d1p6rlowie26tp.cloudfront.net/storybook/branches/master/?path=/story/overview-storybook-guide--coverage-guide), +or run `pnpm storybook` for the current checkout. The feature and capability IDs +come from the [feature recipes](../feature-map/README.md). Product behavior and +permissions remain governed by the implementation spec and access companions. -## Ownership +## Authored sources -- [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. +Each story owns its small `parameters.paperclip` annotation. There is no authored +central catalog, review ledger, date stamp, source list or fingerprint to update. +Storybook's CSF parser supplies filenames, titles, explicit meta IDs, exports, +play-function counts and story IDs without executing story modules. -## Catalog contract - -`catalog.json` is the maintained inventory, with one entry per authored story file. -`INDEX.md` is generated from it, the upstream feature map, 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. -Shared foundations may declare `home: "foundations"` to retain their folder and -sidebar while linking related capabilities. This override requires an exception -reason; it is not available for arbitrary feature homes. -Foundations/guides and proposals without a mapped capability need an exception -reason. An absent story is not automatically a feature gap. - -[Verification routes](VERIFICATION.md) classifies the currently unassociated -capabilities: UI examples to add, CLI/operator operations, and real browser checks. -It records source review and existing test starting points, not executed proof. -Update its rows/counts and source revision when associations or upstream -capabilities change. A capability with a story still needs production verification -for permissions, persistence, execution and provider behavior. - -## Folders and sidebar - -Story files live in `ui/storybook/stories//`, using the first -capability's area slug. Related capabilities still point to the same story. Shared -fixture modules and assets live in `ui/storybook/support/`; production wrappers in -`ui/storybook/prototypes/` retain their existing ownership. - -The sidebar follows the section and feature names in the feature-map README, then -retains each suite's useful scenario grouping. Foundations contains shared component -examples with no primary product capability. Overview contains the catalog guide. -Every indexed feature has an Overview page, even when it has no cataloged examples. -The main guide and these pages use the same section, feature, and capability order -as the upstream map. Related suite links cross primary homes without copying stories. -Sidebar labels replace `/` with `, ` because Storybook treats slashes as folders; -the index and page heading retain the original feature name. -Missing examples are explicit; historical examples and guides do not imply current -behavioral coverage. - -`ui/storybook/generated/` contains the derived index and one CSF Overview per -feature. The inline `storySort.order` in the preview config is also generated: -Storybook's indexer requires a literal there. Regenerate these outputs with the catalog command; do not edit -them or add them to the authored inventory. Their stable IDs use -`feature-map---overview`. Generated pages are explanatory guides and do not -increase example-suite counts. Storybook start/build checks this output for drift. -The generator fails on unexpected files rather than silently deleting them. - -Each suite declares an explicit CSF `id`, recorded as `stableId` in the catalog. -The `sidebarTitle` can change without changing that identity. Existing story and -autodocs URLs and screenshot names remain valid. Do not derive a replacement ID -from a newly organized title. The checker rejects missing or changed explicit IDs, -incorrect feature folders, and sidebar titles outside their primary feature home. - -Each entry records purpose, capability references, review sources/date/fingerprint, -notes, and three independent dimensions: - -| 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 scripts/storybook-feature-index.test.mjs +```ts +const meta = { + id: "tasks-create", + title: "Tasks and conversations/Task creation and lifecycle/Create", + parameters: { + paperclip: { + capabilities: ["tasks/create"], + implementation: "production", + boundary: "fixtures", + notes: "Uses the shipped composer; submission is simulated.", + }, + }, +}; ``` -The checker rejects unaccounted or deleted stories, invalid capability references, -duplicate entries/IDs, missing review sources, changed fingerprints and a stale -generated indexes and feature pages. `--write` only regenerates these outputs; 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. -Feature outputs are regenerated before fingerprints are checked. If those writes -change a review source, the command fails with the affected review entries. Inspect -the generated change before updating those fingerprints and rerunning the command. +`capabilities` is an array of stable `area/capability` IDs. Its first entry is the +primary home; others cross-list the same suite. An empty array requires an +`exception` explaining the intentional scope. Shared foundations may use +`home: "foundations"` with an exception to keep their existing location and links. +The metadata must be literal; place it after any other parameter spreads. -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. +| Field | Values and purpose | +| --- | --- | +| `status` | `current`, `proposed`, `historical`, `mixed`, `unreviewed` (default). Authored product alignment intent, not a live review certificate. | +| `implementation` | `production`, `prototype`, `mixed`, `guide`, `unreviewed` (default). What actually renders. | +| `boundary` | `fixtures`, `fixture-server`, `static`, `unreviewed` (default). What is simulated or requires an owned fixture. | +| `notes` | Optional durable scenario limits and rationale. Do not append a history of unrelated changes. | +| `replacement` | Optional repository-relative path of an existing replacement story. | + +A production component can use fixtures. A prototype that imports production +primitives remains a prototype of its outer subject. Use `unreviewed` when intent +or parity is unclear. Preserve useful historical examples and their explanations. +Historical examples, proposals and guides do not remove missing-example gaps. +No annotation or story count proves permissions, persistence, provider behavior, +full recipe coverage or passing tests. + +## Navigation and outputs + +Stories live in `ui/storybook/stories//`. Sidebar titles use +the recipe's section and H1 title, followed by the suite name. `/` in feature +labels becomes `, ` in the sidebar. Preserve explicit CSF IDs across title/folder +changes. Compare the built `index.json` when changing navigation. + +The generator discovers feature recipes and story annotations. It assembles: + +- `ui/storybook/generated/catalog.json` and `feature-index.json`. +- A generated Overview story per feature, retaining `feature-map---overview`. +- `ui/storybook/.storybook/preview.tsx`, with the literal sidebar order required + by Storybook and the authored decorators/fixtures from `preview-base.tsx`. +- Markdown feature, access, Storybook and verification indexes, plus the current + page inventory, under `maps/generated/`. + +All these outputs are ignored. Storybook start/build and UI typechecking generate +from a fresh checkout. The published Storybook includes the guide and each feature's +verification scope. After edits during a dev session, rerun the generator (restart +Storybook after navigation changes). Obsolete generated Overview files are removed. +Never edit generated outputs or commit them to resolve a merge conflict. + +## Checks and review + +```sh +node scripts/check-maps.mjs +node scripts/storybook-catalog.mjs +node scripts/storybook-catalog.mjs --check +node --test scripts/check-maps.test.mjs scripts/storybook-catalog.test.mjs scripts/storybook-feature-index.test.mjs +``` + +`--write` is a compatibility alias for the default generation command. `--check` +validates authored inputs without requiring existing outputs or writing files. +Checks reject malformed annotations, unknown capabilities, duplicate IDs, broken +map references, missing companions and invalid navigation. CI runs the map tests +through the UI Vitest suite and validates/generates inputs during UI typechecking. + +Use Git diffs to select changed stories, rendered subjects, fixtures, and recipes +for review. A changed source is a review candidate, not an instruction to refresh +metadata on every dependent example. Inspect actual imports and contracts; shared +fixture changes can require broad review without broad acknowledgement edits. +Keep revision-specific findings and executed evidence in the PR, issue or CI +artifact. Move only durable limitations into the affected source annotation or +recipe. Past review history remains available through Git. + +`maintain-storybook` owns stories and their annotations; `review-storybook` exercises +them. Product/access maintenance owns the recipes, including optional capability +verification scope. Use the [existing Storybook browser workflow](../../doc/DEVELOPING.md#storybook). +Report source inspection, rendering, play assertions, visual comparison and +production acceptance separately. Do not publish new baselines to pass a map cleanup. diff --git a/maps/storybook-map/REVIEW.md b/maps/storybook-map/REVIEW.md deleted file mode 100644 index 2e1d66be77d..00000000000 --- a/maps/storybook-map/REVIEW.md +++ /dev/null @@ -1,878 +0,0 @@ -# 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/`. At the initial -baseline, its 223 story files were split between 176 files at the stories root and -47 nested files, with 51 top-level sidebar groups. The initial pass recorded -product meaning, provenance, and review status before changing that organization. -The follow-up organization pass below moves the files and sidebar together. - -The downstream catalog gives each file a primary feature home and related stable -capability IDs. The generated index includes all 171 upstream capabilities across -35 feature areas. The existing Overview story now provides searchable feature -navigation into the actual built story index. The initial pass kept sidebar titles -stable; the follow-up uses explicit IDs to preserve links while changing titles. - -| 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. - -## Feature organization follow-up — 2026-10-12 - -Source baseline: `75bd3c977cd828d5222823850339e8204f40eb47` (parent PR #16046). -The 223 story files now live under their primary feature area in -`ui/storybook/stories/`. The sidebar uses the feature map's section and feature -labels in map order. Existing scenario groups remain below those labels. -Overview and shared Foundations have dedicated homes. Areas without stories do -not get empty sidebar groups; their gaps remain visible in the catalog. - -Nineteen supporting files moved to `ui/storybook/support/`, including fixtures, -shared wrappers, guide READMEs, an HTML fixture, and a fixture test. Relative imports, -active documentation, catalog sources, and replacement references follow the -moves. Classification and review scope did not change. The upstream feature map -and its skill are unchanged. - -Every suite now has an explicit meta ID, recorded as `stableId` in the catalog. -The built index comparison preserved all 2,210 story IDs, the single docs ID, and -all entry names. No story was removed or added. Catalog validation checks primary -feature folders, sidebar prefixes, and stable meta IDs; its nine tests passed. - -The Storybook build, UI typecheck, all 8,176 UI tests in 728 files, token gates, -map checks, and the maintenance-skill validator passed. A source comparison found -only changed meta titles/IDs, rebased relative references, and updated fixture -path text in story files. The full repository suite was not repeated for these -file moves; the prior full-suite limitation above still applies. - -Local Chromium verified the sidebar's section/feature order, rendered the guide, -searched `steering/queue`, and followed its link to the unchanged -`composer-steering-and-queued-messages--queued-while-running` ID. The nine play -cases listed above and `fast-responses-01-settings--empty` all reached -`storyFinished: success` without page exceptions after relocation. This is a -sample of interactions and rendering, not execution of all 2,210 stories. -The fixture-server story and visual-baseline comparisons remain untested for the -reasons below. The owned static preview was left running for the requested test-drive. - -## Complete feature index follow-up — 2026-10-12 - -Source baseline: `88bf4c6c1d222f818faa56257efe79207c892a6c` (merged PR #16049). -Storybook now derives all eight sections, 35 feature families, and 171 capabilities -from the feature map. Each feature has a generated Overview, including the seven -without primary suites. Related example links cross primary homes without copying -stories. Generated guides are separate from the authored catalog and example counts. -The upstream feature map remains unchanged. Deeper authored scenario groups remain -intact; this pass does not establish new production parity. - -The built index preserved all 2,210 existing story IDs and the docs ID, adding only -35 feature overviews in map order. Catalog/generator tests (16), token gates, map -checks, both skill validators, workspace typecheck, workspace build, and Storybook -build passed. The UI project passed 8,170 tests in 728 files. The broad local test -run encountered a failure in the unchanged GitHub chat case `authorizes description -edits as the editor, never inheriting the original author's access`; that exact -case passed alone without changing code or expectations. A complete local repository -suite pass is not established. PR #16052 records the final CI result separately. - -The local built Storybook passed browser checks for the complete index/sidebar, -capability-ID search, empty search, Goals cross-feature suite links, all five -Execution environments capability gaps, and the existing Questions suite links. -The original `composer-question-flow--editable-initial-text` bookmark still renders. -The CLI feature uses a comma in its sidebar label because Storybook treats `/` as -a folder separator; its guide heading retains the upstream name. - -Review fixes retain matching shared foundations during search and validate review -fingerprints after generated files are written. Searching `Primitive Matrix` shows -and opens the existing foundation story. A regression test changes a capability -description and proves regeneration reports the resulting review drift without -updating fingerprints. These checks establish navigation and generation behavior, -not production acceptance or visual-baseline comparison. - -## 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. - -## Native runtime prerequisite: scoped source follow-up — 2026-10-12 - -Source comparison: `9f59ff36cf2da963709ca19c06ab005510c835a6` against actual -master `4b958ecbd8f33a7782fe6f29ec825f80f636b833`. The reviewed -`maps/feature-map/runs-adapters.md` bytes have SHA-256 -`ca5aff86608b7d7987dc0ee814475a7b93e3faff1f99ce090429d2e932b7e16b`. - -Twenty-one entries in Runs, harnesses, and model accounts and Task creation and -lifecycle had review-fingerprint drift. Their 117 unique declared sources have -one changed input: the runs-adapters feature recipe. All 21 story files and the -other 116 declared production subjects, wrappers and fixture sources are -unchanged from master. The recipe adds bounded native startup and registration -retirement controls. It separates those provider-free controls from real daemon -and installed-provider proof; it changes no represented UI or fixture contract. - -Refreshed only those 21 reviewed fingerprints. No story, fixture, export, stable -ID, title, capability reference or product/implementation/data classification -changed. Existing mixed and unreviewed parity limitations remain. No fixture -correction is needed for this scoped prerequisite; this does not establish full -state parity for the affected suites. - -This follow-up is source inspection only. Rendering, play assertions, visual -comparisons and production provider acceptance were not run. Native lifecycle -behavior remains with the linked transport controls and their existing hosted -CI fixtures. Catalog validation proves structure and reviewed dependency hashes, -not that these live journeys passed. - -## Task workspace reconciliation — 2026-10-12 - -Scope: the 26 declared-source entries affected by task-workspace work at -`88b1d3a2`, compared with master `dabb8c5daf`, including subsequent comment-only -cleanup and the fixture corrections below. This is a bounded source review, -not a new review of all Storybook states. Reconciliation onto `b5046ec022` -preserves its new feature folders, sidebar titles and explicit stable IDs, along -with the existing exports, classification and simulation boundaries. Shared GitHub -fixtures now live under `ui/storybook/support/github-bot-management/`. - -Twenty-one entries changed only through the expanded chat/workspace recipes. -Their setup, identity, browser, artifact, picker and service examples are retained; -the new recipe requirements do not become covered merely because they reference -the same capability. Five entries also depend on changed production subjects: - -| Story file under `ui/storybook/stories/` | Source review and remaining scope | -| --- | --- | -| `chat-channels/chat-management/chat-management.stories.tsx` | Mounted endpoint includes connection/destination defaults. Added the missing selectable-workspace fixture response; existing endpoint PATCH and resource PUT retain defaults. No browser save, error, reload or inheritance proof in this pass. | -| `chat-channels/github-bot-management/management.stories.tsx` | Mounted endpoint/repository editors include defaults. Fixed the endpoint mock to persist PATCH values instead of returning the original endpoint. Resource PUT already distinguishes omitted, null and concrete values. Project/workspace choices are intentionally empty fixtures. | -| `chat-channels/imessage-photon.stories.tsx` | Existing scenarios mount setup/access and simulate task conversations. They do not exercise the newly added settings editor or its workspace-choice request. Kept unreviewed rather than claiming settings coverage. | -| `projects/projects-goals-workspaces.stories.tsx` | Existing project-bound summaries still match the rendered components. New nullable project references and runtime invalidation branches have no projectless story scenario here. | -| `workspaces/workspace-runtime-provisioning.stories.tsx` | The demonstrated status subcomponent is unchanged. Its local context row does not prove the full detail page's new projectless behavior. | - -The three endpoint-management entries now declare `ChatExecutionDefaults` and its -API clients as review dependencies. AgentMail settings still demonstrates only -the inbox subsection, not the surrounding endpoint defaults. Historical GitHub -designs remain historical; existing unreviewed entries remain unreviewed. None of -these fixture examples establishes source authorization, retained file privacy, -pending workspace selection, sandbox admission or existing-conversation continuity. - -Executed: the GitHub fixture's two Vitest cases passed, including default save, -subsequent GET, omitted-value preservation, explicit null clearing and fresh-mount -reset. After the folder rebase, both fixture tests and all nine catalog checker -tests passed again; token gates passed before the path-only reconciliation. After the final -source freeze, only the 26 reviewed fingerprints were refreshed; catalog validation -passed for all 223 files and all 2,210 source-parsed story IDs were unchanged. -All 223 upstream file paths, explicit stable IDs and sidebar titles were preserved. -Not run in this pass: Storybook build, browser rendering or `play`, screenshot -comparisons, provider calls and live production acceptance. No new visual -baselines were accepted. Fixture tests are boundary simulations, not server -persistence or permission tests. - -## Workspace safety recipe follow-up — 2026-10-12 - -Reviewed the twelve entries that depend on the workspace feature recipe: browser-use activity/footer/page, the three HTML-artifact suites, project execution strategy and project workspace summaries, searchable selection, workspace files, runtime provisioning and service controls. Their production subjects, fixtures, feature folders, sidebar titles and stable IDs are unchanged. The recipe now requires prospective child boundary checks, safe low-trust reopening, and coherent returned checkpoint ancestry. These backend safety contracts are not exercised by those fixtures. Each entry remains unreviewed for full production parity. Only the reviewed recipe fingerprints were refreshed; no browser render, play, screenshot baseline or production acceptance was run for this follow-up. - - -## Remote provisioning recipe follow-up — 2026-10-13 - -Reviewed the same twelve workspace-recipe-dependent entries after extending the controller-provisioning boundary to standard-trust sandbox and SSH selections. Their components, fixtures and stable IDs are unchanged. Project strategy stories demonstrate configuration fields with environment selection disabled; runtime provisioning stories demonstrate status values with a no-operation log handler. Browser, artifact, file and service-control fixtures do not execute source scripts or prove admission placement. The new recipe requires controller marker denial independent of source write grants while copying and dispatch remain available, including local copy-only selections, retained deny-only metadata and closed-worktree reopening. Implicit trusted local defaults remain separate positive controls. All twelve entries retain their unreviewed production classification. Refreshed only these recipe fingerprints after this source review; no browser render, play, screenshot, Storybook build or live runtime qualification is claimed. - -## Default-source recipe follow-up — 2026-10-13 - -Reviewed the twelve unchanged workspace recipe subjects and fixtures after correcting implicit default selection. Task creation and controller classification now share configured-policy, primary, creation-time and ID precedence. Explicit choices and retained denial markers still suppress controller hooks. Project strategy fixtures show configuration, while runtime status and file/browser/artifact/service fixtures do not execute source scripts or prove this backend ordering. Refreshed only their reviewed recipe fingerprints and retained all classifications and stable IDs. No browser render, play, screenshot, Storybook build or live runtime acceptance was performed. - -## Workspace finalization UI refinement — 2026-10-13 - -Source base: `f07efa2802`, followed by scoped edits to the production recovery notice and its two story suites. Reviewed `recovery/workspace` and `recovery/source-action`; stable story IDs and administrator admission remain unchanged. The notice leads with saved work, discloses controller metadata, explains evidence/confirmation requirements, and distinguishes queue acknowledgement from completion. A stale controller error preserves the note and clears confirmation so the operator must verify again. The task composition uses viewer identity for human bubbles and omits a routine status badge. - -MacOS in-app browser inspection passed for the task journey at desktop and 390px mobile widths: controller disclosure with Enter, evidence without confirmation remaining disabled, explicit confirmation enabling submission, and a simulated queued result in place. The `owner-changed` story's play assertions passed; the friendly error was visible, the note remained, confirmation cleared and the action was disabled. The `long-controller-name` story rendered at 390px without horizontal overflow. The mobile task shell showed its bottom navigation; evidence text computed to 16px and Tab reached the enabled action. No physical mobile keyboard, Linux screenshot baseline, live deployment stop, real API admission or provider copyback acceptance is claimed. Other story states received source review, not a full browser execution pass. - -Refreshed the two reviewed catalog entries only. Global catalog validation already reported unrelated source-fingerprint drift before this work; those entries require their own review. - -## Automatic workspace recovery revision — 2026-10-13 - -Supersedes the task shutdown form reviewed above. The production task now renders -only a quiet restoration status or an honest operator-assistance fallback. It -contains no process metadata, evidence field, confirmation checkbox or resume -button. The task thread omits the duplicate technical recovery card. Obsolete -form stories and their simulated API fixture were removed; suite IDs remain -stable. The composed task journey includes a saved state without the notice. - -Observed in the macOS in-app browser: automatic status in the production shell, -completed example without the status, retained approval-wait message, and mobile -bottom navigation with equal content and viewport widths (no horizontal overflow). -These are fixture UI observations, not live provider shutdown or task commitment. -The production component test verifies removal on a resolved action update. The -real reconciler's database tests separately preserve accepted-result identity, -monitor and approval waits, and create no new run or wake request. - -Only the two reviewed suites have refreshed fingerprints. Global validation has -71 other source-fingerprint errors, including recovery-recipe dependents after -the operator instructions changed. It is not globally green. No unrelated review -fingerprints or visual baselines were accepted. - -## Inherited activity, inbox and recovery recipes — 2026-10-12 - -Source comparison: master `e168512f7bdbb6af6ea01954c6d7ed80b91e903e` -against previous master `f329b24ee12496e710ad17377ec7716e0eee22ef`, -while reconciling the native-runtime prerequisite. All 25 affected catalog -entries are identical to e168 master; their stale fingerprints were inherited. - -The 101 unique declared inputs have three changed feature recipes. The remaining 98 inputs, including all 25 story files, are unchanged -between those masters and the merged worktree. They include 92 non-map -story, subject, wrapper and fixture sources and six unchanged map files. The reviewed recipe -bytes have these SHA-256 identities: - -- `maps/feature-map/activity.md`: `3867cc392c031cc5ca9ec61bfc4211d685da37e39fb36e9b152497b7cf970caf`. -- `maps/feature-map/inbox-search.md`: `8ff5431ddfe54c0c288eecffb785f864d8bfeb38be50c66615999ffbbfba6863`. -- `maps/feature-map/recovery.md`: `46fee5940f23a6d1483697e0b07817a78d993d4748b51121d2e113dd2a96173b`. - -The activity addition names issue-scoped activity authorization and sandbox -bridge controls; company audit/display fixtures do not establish live sandbox -agent access. The inbox recipe excludes automatic historical read cleanup from -user participation while retaining explicit decisions; static inbox/decision -examples do not execute that query or the newly required user/company journey. -The recovery recipe retains native workspace-owner holds across task completion -and repeated reads until exact operator retirement; recovery display fixtures -do not establish ownership, copyback denial, action identity or live operator -recovery. These backend acceptance requirements remain separate gaps. - -The proposed maintenance changes only those 25 reviewed dependency fingerprints. -Retain the existing 24 unreviewed and one current classification, simulation -boundaries, story exports, titles and stable IDs. No fixture or story correction -is indicated by this declared-source comparison. This does not promote full -state parity or coverage for the added backend requirements. - -Source inspection only: no browser rendering, play, visual baseline, provider -run or live production acceptance was performed for this reconciliation. The -existing catalog checker must run on the actual merged tree after synchronization; -its result verifies structure and declared hashes, not these live journeys. - -## Codex defaults source reconciliation — 2026-10-13 - -Private source composition: prerequisite `271d434c170e74bdedde65d0b13059a55419c943` -and Codex defaults `1a0ca66242121e39d88455aa2b52a07acc4a07d9`, plus the prepared -managed-onboarding patch `449790ed14d6104fa2559df07254173e6668d45a570c90dc3d80882c764b09a5`. -This is a source and structural review. Rendering, `play` execution, visual -comparison and production acceptance are not established by this pass. - -The existing production creation suite now lives under its primary `agents/hire` -home, with explicit meta ID `agents-codex-runner-creation` preserving its prior -implicit identity before the sidebar rename. Its fixtures resolve omitted/automatic -runner requests from simulated target availability rather than always returning -native execution. Automatic native, explicit Legacy and returned hire identity -assertions are stronger; the new unqualified-target state displays the Legacy -default. The suite still simulates runtime responses and persistence. - -Four cases extend the existing production `OnboardingWizard` arc: immutable-image -qualification on Connect, a measured Legacy target, instance-admin refusal, and -unconfirmed cleanup. Each uses company/environment-scoped discovery and a saved -probe fixture that changes availability only after a successful measurement and -cleanup receipt. The successful cases require a real second fixture discovery -request before adapter testing and hiring, with runner override omitted. Refused -and cleanup cases assert one probe, zero adapter tests/hires, actionable guidance -and the Advanced Legacy control. The fixture does not override query stale time; -Storybook's existing infinite stale time keeps cached availability relevant. -These are simulated boundaries, not evidence that cloud boot identity, actual -permissions, cleanup or provider execution work. - -All existing Legacy/native Codex editing states, light/mobile variants and the -Advanced Legacy assertion remain unchanged. The mixed local settings shell still -mounts production configuration panels; it does not prove the complete live -AgentDetail route. Historical new-agent and model-tile prototypes are retained -with their existing classifications and replacement references. - -The catalog source changes inspected are the three affected upstream feature -recipes, harness branding in agent roster/detail/properties, shared picker and -configuration selection, built-in configuration, production onboarding, and the -Codex settings wrapper. Fingerprints and direct review dependencies reflect these -changes while retaining existing statuses and deeper parity limitations. This is -not a new review of unrelated product states. - -Source CSF comparison preserves every prior 2,223 ID and adds five states, yielding -224 files and 2,228 stories. The source ID comparison is not a built-index or URL -acceptance check. Catalog validation and its nine existing structural tests pass; -UI no-emit typechecking passes in the private composition. No Storybook build, -browser rendering or `play` assertions were run. The checked-in visual baseline -manifest has no published source/archive, so it cannot establish a visual -regression comparison. Build and inspect the affected IDs through the existing -Storybook workflow after the actual parent merge and final source reconciliation; -do not publish a new baseline to close this gap. - -The warm-cache reproduction subsequently found four failing production-cache -controls before correction. Both scoped availability fetches now request fresh -data with `staleTime: 0`; this Storybook source pass fingerprints the corrected -`OnboardingWizard.tsx` SHA-256 -`3f86a6e228750aceb5728b294dfa98f4678cf4905a35e355c01db35b0f6f20fa`. -The new fixture retains the existing infinite-cache setting and requires the -post-probe request, so source-only fixture success is not being manufactured by -shortening Storybook's cache lifetime. The corresponding component reproduction -and treatment evidence belongs to the runner-default preparation record, not a -claim that these unexecuted Storybook `play` cases passed. - -## 2026-10-13 master merge reconciliation - -Reviewed the source delta from `4808adc34e` to merge `63b2e7b8ad` -(master parent `d67e3507b2`). The text conflict in INDEX retained the feature-map -ordering and upstream workspace review notes. Regenerated INDEX after reviewing -61 stale catalog entries against the changed declared sources. - -The inspected changes add assignment-history recipient suggestions and preserve -manual selections, expand backend verification recipes, and add channel task -defaults and access avatars with matching fixture changes. Entries record those -limits. The sidebar suite that also mounts IssueDetail is now unreviewed because -its route fixture has not been exercised against the new activity query. Existing -composer examples omit the new optional suggested-assignee prop and retain their -previous scenarios; their classifications do not certify the new behavior. - -All 223 authored suites and 2,210 authored story IDs remain. Generated feature -pages still cover 35 areas and 171 capabilities. Catalog/generator tests (16), -catalog validation, map checks and token gates pass. This is source reconciliation, -not a new visual or live production acceptance claim. - -## 2026-10-13 capability association reconciliation - -Source baseline: `60bc0d5fee9a6e48db08fc016521fee3d9f57d67`. -Reviewed the complete authored inventory and missing-capability lookup, then -inspected the candidate story exports, wrappers, fixture behavior and shipped -subjects. This pass corrects navigation associations; it is not a full parity, -interaction or visual review of all 223 suites. - -Added 55 references across 34 suites. Primary-agent suites now use their own -capability instead of organization/reporting. Shared foundations retain their -physical and sidebar home while cross-listing `developer-labs/design` through -an explicit, reasoned Foundations override. No story was moved, renamed or removed. -The parser comparison preserves all 223 files and 2,210 authored story IDs. - -The map had three omissions revealed by stories and confirmed in shipped source: - -- `agents/primary-agent`: personal choice, confirmation and fallback presentation, - distinct from organization/reporting. The production provider and self-service - API have user/company scope; the story presentation provider simulates changes. -- `companies/decision-models`: connection/model/sponsorship configuration, - bounded testing and history. Settings require board connection management; - history and task-link visibility have separate read policies. -- `companies/fast-responses`: experimental acknowledgement configuration, - tests and history. A receipt does not establish completed agent work. - -Added their production recipes and same-ID agent-access companions. Existing -capability IDs remain. Both maps now contain 35 families and 174 capabilities. -New access evidence is source-only; no live provider or agent-access claim. - -Confirmed association evidence and limits: - -| Existing suites | Added lookup | Demonstrated scope | -| --- | --- | --- | -| Four shared foundation suites | Developer design | Production controls and contributor visual states; no application journey claim. | -| Agent chat | Handoff | Project-created, existing-project, repository and failure results; tool results/navigation simulated. | -| Agent management | Environment assignment | Forced Kubernetes target and missing-target warning; no saved assignment or execution. | -| Team catalog | Installation/configuration | Progress/success results and adapter choices; no real install, account setup or routed catalog. | -| Issue-thread interactions | Plan review/continuation | Approval, stale-revision and accepted-but-resume-failed states; no successful resume or duplicate-suppression proof. | -| New-task composer | Workspace binding | Worktree selection and submitted request values; no execution admission. | -| GitHub skills journey/detail | Policy/versions | Assignment selection and fixture revisions; no runtime enforcement or durable no-op callbacks. | -| Routine webhook/detail | History/audit | Production Runs/Activity with fixture tasks/events; no scheduler or audit-persistence proof. | -| Budget finance | Incidents | Warning/resolved/pending/escalated cards; resolution callbacks are no-ops. | -| Public-MCP setting | Instance configuration | Experimental flag toggles, cloud restrictions and failed-save rollback; no other instance settings. | -| Arcade/Composio/Executor/Zapier setup | Draft recovery, identity, action policy/testing | Production setup/permissions with in-memory drafts; reload loses the draft. | -| Chat management/iMessage Photon | Provider, identity, conversation, lifecycle and setup/failure | Shipped hosts with simulated provider/identity/delivery data. | -| Primary-agent suites and decision/fast-response suites | New map capabilities | Production UI subjects plus simulated preference/provider/result boundaries. | - -Eleven previously empty capability lookups now have related examples. With the -three newly mapped capabilities also linked, the absent-example count changes -from 70 of 171 to 59 of 174. This measures catalog links, not complete behavior -coverage. Review classifications were not promoted by this association pass. - -Retained gaps and rejected lookalikes: - -- Document preview/annotations do not establish version editing/restoration. -- Seeded drafts do not establish task switching, reload or uncertain submission. -- Approval resume failure does not establish durable approval delivery. -- NewToolsAllowed does not establish quarantined-action review. -- Assistant OAuth revocation does not establish gateway token scope/revocation. -- Budget resolution controls with no-op handlers do not establish relief/resumption. -- A closed browser session does not establish workspace closure/reopening. -- Team fixtures and Skill Studio route presence do not establish working installs - or Studio test execution/results. - -The gateway-token fixture needs separate review before advertising coverage: -its token data may omit fields read by the production token panel. The missing -lookup remains explicit. Rendering/interaction checks below cover selected -association navigation, not all source-audited suites or production acceptance. - -Executed checks: 27 catalog/generator/map tests, catalog and map validation, -token gates, skill validation, repository typecheck/build and Storybook build -passed. The built index has 2,246 entries and loses none of the original 2,211. -In the browser, the developer Design lookup opens the preserved primitive URL; -company-service sections link the existing settings/history/journey suites. -The decision SetupToHistory journey passed its 12 interaction steps and showed -the simulated test receipt in history. Primary-agent ReplacePrimary passed its -four interaction steps and displayed the replacement confirmation. No console -errors were observed in those selected checks. No visual-baseline comparison. - -The broad local repository test run was interrupted before completion to merge -new master changes; no full local suite pass is claimed. Fresh CI on the updated -branch supplies repository-wide verification. The merge retains master’s native -REST transport updates alongside the three new capability records; new live -provider and agent-credential verification remains not run. -## Slack DM mention exemption — 2026-10-13 - -Scoped source review: Slack DMs no longer require an at-mention, while channel -messages and channel thread replies retain the saved mention policy. Top-level -DM replies remain linear. The production `ChatEndpointDetail` settings copy and -the feature-map manual recipe now state this distinction. - -The Chat management story mounts that production settings page and merges -endpoint PATCH values in its local fixture. GitHub bot management and Photon -also reference the page, but do not render its Slack-only toggle. No story UI, -fixture behavior, or story identity changed, and no browser proof is claimed. - -After rebasing onto master `60bc0d5fee`, the upstream catalog reconciliation -supplies the reviewed baseline for the previously stale entries. Refreshed the -fourteen entries affected by this change: all reference the updated chat recipe, -and three also reference the Slack-only settings copy. Other source bytes and -all classifications, fixture boundaries, story IDs and sidebar titles remain -unchanged from that baseline. Catalog checks validate these references and -fingerprints, not live Slack behavior. - -## Codex reconciliation with current master — 2026-10-13 - -Source inputs: current master `833769ab557255b11dd8f650f43ed7333653f5e4`, the -Codex runner-default source being reconciled, and the preceding private Codex -Storybook preparation. The older dated results above retain their original -source and execution scope; they are not results for this merged candidate. - -The current master catalog is the regeneration base. Its existing capability -associations, primary-agent references, Foundations home exceptions, sidebar -layout, classifications and fixture boundaries remain intact. Codex review notes -and direct picker/branding dependencies are additive. Both branches' dated review -histories are retained. The current canonical generator supplies the feature -index and inline sidebar order; the only generated source difference from this -master is the `agents/hire` description changing “adapter” to “harness.” - -The source CSF identity comparison retains the union of all 2,215 authored IDs -on current master and 2,228 in the prepared Codex source: no removed or unexpected -IDs, with 224 suites and 2,233 authored stories. All 35 generated feature Overview -IDs remain. The five focused production-component additions from the private -preparation are retained, alongside the existing Legacy/native editing, light, -mobile and Advanced states and the more recent master stories. - -Inspected the Codex selection/branding changes in the three affected recipes, -production configuration/onboarding and agent list/detail/properties, shared -picker, built-in configuration, and the existing settings wrapper/stories before -refreshing their fingerprints. Shared generated-description changes were inspected -separately. Eighty affected authored entries and the shared setup fingerprint now -refer to the reconciled bytes; their existing parity limits remain unchanged. - -Executed source/structural checks: canonical catalog generation and validation -pass for 224 files and 2,233 stories; the existing catalog/generator tests pass -17/17, map tests pass 10/10, and map validation passes for 35 areas and 175 -capability IDs. These establish inventory, associations, references and review -fingerprints. No new Storybook build, rendered `play`, built-index comparison, -visual baseline, live authorization, cleanup, persistence or provider execution -is claimed by this reconciliation. Those checks remain with final qualification. - -### Current-master reconciliation - -Merged master `5e8e992df2`. The newer catalog supplies the baseline associations -and reviews. Compared every declared input against that master: only seven -inputs changed for this feature (recovery recipe, recovery card, task page, quiet -status, two stories and their fixture). Reviewed those changes and the unchanged -subjects/fixtures they affect; refreshed the 26 dependent fingerprints while -retaining their classifications and simulation boundaries. The task-page change -adds the quiet status and suppresses only the owner-unverified duplicate card; -other task variants retain their behavior. The recovery-card change blocks -unsafe generic dismissal. Existing card regressions cover that denial. - -Five remaining errors have unchanged source bytes and metadata inherited from -master: shared setup, decision-card, decisions-desk, search and what-needs-me. -These require a separate review; no hashes or visual baselines were accepted for -them. The earlier 71-error count above describes the pre-merge baseline. - -### Inherited index metadata follow-up - -The current master's personal-toast recipe also left shared setup and four inbox -suites with stale metadata. Reviewed the recipe's added toast capability and -verification limits: decision-card, decisions-desk and search still demonstrate -their existing isolated subjects; what-needs-me's toast fixture does not prove -viewer eligibility. Their subject and fixture bytes are unchanged from master; -retained all unreviewed classifications and fixture boundaries. The generator -adds the missing toast capability and description to the existing inbox feature, -without changing feature order or IDs. Reviewed that generated diff and refreshed -these four entries, the shared setup and Overview fingerprints. No toast behavior, -new browser acceptance or visual baseline is claimed. Global catalog validation -now passes. This supersedes the five inherited-error count above. - -### Confirmed recovery status - -Reviewed the shipped notice, server evidence contract and both recovery fixtures. -Platform identity alone no longer means work is restoring: the server marks the -exact recovery receipt resuming only after verified stop proof and a successful -owner claim. Missing proof remains operator-required. The new unavailable-proof -story covers a platform-bound receipt without progress; confirmed and queued -stories retain the quiet status. Updated only the two affected fingerprints. -This is component/fixture evidence, not deployed harness acceptance. - -### Latest master reconciliation - -Retained master’s task-creation visibility scenarios, source-review notes and -unreviewed classifications. Seven overlapping entries differ from master only -in the already reviewed recovery recipe or task-detail recovery notice wiring. -Refreshed those combined-source fingerprints and regenerated the index. No new -creation-visibility acceptance or visual baseline is claimed. - -## Codex and workspace-recovery catalog merge — 2026-10-13 - -Reconciled Codex head `7956056b2f793aa1043f4a4454630cdedd90185c` with current -master `e3029c632b26b68595adc1a704a387833b3cefcb`. Both dated review histories above -retain their original evidence scope. The current master catalog supplies the -new workspace-finalization recovery suites and their source classifications; -Codex creation, onboarding and Legacy/native editing states remain additive. -Existing association, sidebar, home and simulation-boundary metadata is preserved. - -The authored source ID union is intact: 2,224 IDs from current master plus 2,233 -from the Codex head produce 2,242 stories across 226 suites, with no missing or -unexpected IDs. All nine newly merged workspace-recovery states, the five focused -Codex preparation states, twenty existing settings states and 35 generated feature -Overview IDs remain. The recovery notice is a production component; the task -journey remains an explicitly mixed local composition, not a live task-page test. - -Canonical regeneration and validation pass. The existing catalog/generator/map -tests pass 27/27; map validation passes for 35 areas and 175 capability IDs. -Inspected the combined Codex source dependencies and generated harness-description -change before refreshing 79 affected entry fingerprints and the shared setup. -The incoming recovery entry metadata is retained. No classifications or visual -baselines were promoted. These results prove source inventory, references and -structural contracts; no new rendering, `play`, provider, permission, cleanup or -production-continuity acceptance is claimed for the merged source. - -## Codex configuration dropdown source review — 2026-10-13 - -Inspected the frozen AgentConfigForm environment override and Codex runtime -lifecycle/ACP dropdown replacements. They now use the same SelectPopover as the -harness picker, retaining their options, normalization and create/edit callbacks. -Refreshed seven existing suite fingerprints after tracing their rendered subjects; -added the Codex config-fields dependency to the agent-management and saved-settings -suites that actually mount those fields. The other five suites import picker fields -or substitute local runtime content, so their notes explicitly exclude the changed -controls. Historical and mixed classifications, all prior review histories and -Legacy/native states remain intact. - -Canonical catalog generation and the existing structural tests establish source -inventory and references only. The prior Storybook build at `448db859e3` predates -these dropdown edits; it does not prove their rendering or interactions. No new -render/play, visual-baseline, provider or production-persistence proof is claimed. -## Verification routes for unassociated capabilities — 2026-10-13 - -Source classification against merged master `5e8e992df2`: [VERIFICATION.md](VERIFICATION.md) -accounts for all 60 capabilities without non-guide example associations. It -records 49 UI example gaps with separate production contracts, eight CLI/operator -operations and three browser verification boundaries. Existing tests are starting -points; no new live journey, rendering, interaction or visual evidence is claimed. -The targeted association revisit found no further justified links. This does not -complete parity review of the 184 example suites still classified `unreviewed`. - -Master includes #16153's personal task-toast capability. Its upstream README and -recipe were inspected; reconstructing the five inbox-suite and shared fingerprints -with the pre-toast recipe bytes matches the stored baseline. No other declared -source changed for those suites. Regeneration adds the capability/description to -the feature index, which also changes the guide fingerprint. Refreshing those -review fingerprints preserves statuses, associations and all 2,212 authored IDs. - -Catalog/map checks, 27 catalog/generator/map tests and maintenance-skill validation -passed. The 60-row inventory and all local links were checked against current -source. Repository-wide typecheck/tests/build and Storybook build are not run for -this documentation and generated-data pass; runtime behavior is unchanged. - -Review correction: backup retention already has shipped controls in -`InstanceGeneralSettings`, embedded in `CompanySettings`. The backup row therefore -keeps missing retention UI examples alongside separate CLI backup/restore proof; -it is not a wholesale Storybook exemption. No existing story mounts those controls. - -## Verification-parent merge reconciliation — 2026-10-13 - -Reconciled master `da9af67415` while preserving its catalog records and both -review histories. Inspected the intervening recipe changes for Telegram -maintenance, liveness/readiness and trusted instance-secret lifecycle, and the -soft-warning versus hard-stop budget UI. Refreshed only dependent review -fingerprints with notes naming those boundaries; classifications remain unchanged. -The generated feature index reflects the current recipes. No new rendering, -provider journey or whole-suite parity review is claimed. Catalog/map validation -and all 27 catalog/generator/map tests pass with the pinned Storybook parser. - -## Codex and current-master catalog reconciliation — 2026-10-13 - -Reconciled Codex `0065d06474ddc3245d8fee83bf3fbc108c9a0165` with master -`252d9b5077f4eee98ec48225641ef1a02d824158`. Retained all 226 authored entries, -stable story IDs, simulation boundaries and dated review histories from both -branches. Codex creation/settings notes remain alongside master’s Telegram -maintenance, database-readiness and trusted instance-secret limits. The existing -verification-route inventory and its source-qualified scope are preserved. - -Combined-source fingerprints and generated indexes are reconciled after inspecting -their changed inputs. This pass establishes inventory and reference structure only; -it adds no rendering, interaction, provider, account, cleanup or production -acceptance evidence. Historical receipts retain their original tested sources. - -The only new declared source inputs are master’s secrets recipe and the canonical -generated feature index. Three onboarding hashes were already stale at `0065`: its -recipe added the operator QA timeout/concurrency guard after the prior hash review. -Those four recipe lines were inspected and the entries retain their fixture and -historical limits; the stories do not establish that guard. Refreshed the five -affected entry hashes and shared setup. The verification-route inventory still -exactly matches all 60 unassociated capabilities, with no stale or missing rows. - -## Production-subject UI gap examples — 2026-10-13 - -Step 3 adds 37 suites and 257 scenarios associated with the 49 UI capabilities -from [VERIFICATION.md](VERIFICATION.md). Subjects are shipped pages/components; -API replies, sockets, callbacks and storage seeds remain simulated. Source -review uses production snapshot `a9ef9e8ebc1f41bb7047142704655d08b3e47be7`; -the story revision is `36689fc8149c31858d0b4c6f7839ecc663404073` plus the review -corrections in this commit. Catalog fingerprints identify the tested source bytes. -Existing suite classifications and all 2,248 prior built entry IDs are preserved; -the new built index has 2,505 entries. Existing unreviewed suites remain unreviewed. - -Executed the focused browser suite against this checkout's static build on macOS -Chromium at 1280 × 900 with reduced motion: **260 checks passed**. Every new story -was exercised: 129 declared play functions passed; the remaining 128 scenarios -have explicit subject-content, skeleton, editable-control or documented fallback -assertions. The only intentionally empty root is the zero-entry durable-response -queue, whose shipped component returns null. Additional checks verified token -fixture reset through sidebar navigation and backup retention at 390 × 844 in -light and dark themes. No browser page errors were observed. The test names -identify each story ID; rerun with the command in VERIFICATION.md. Selected -screenshots are inspection captures, not pinned Linux visual-baseline comparisons. - -Review corrections give empty stage settings zero stages and assert its message, -make failed reads return HTTP 500 rather than the service-warmup HTTP 503, -provide Inbox dependencies and actual plugin redirect destinations, use distinct -attachment paths and a valid uncertain-submission UUID, and select Interactions -before play starts so the browser harness does not steal input/menu focus. - -Repository typecheck/build, the UI Vitest suite (730 files, 8,208 tests), -four fixture-boundary tests, 27 catalog/generator/map tests, token gates and -Storybook build passed. The full local repository test command could not complete: -embedded PostgreSQL exhausted host shared-memory allocation, and native-runner -tests reported timeouts. No host settings or other jobs were changed. - -Production acceptance and pinned Linux visual comparisons were not run. The -scenario inventory retains outstanding recipe variants and real authorization, -persistence and provider contracts. Examples expose existing read-error/loading -fallbacks rather than inventing feedback; those limits are named in VERIFICATION.md. - -## Step-3 merge reconciliation — 2026-10-13 - -Merged current master `da9af67415` through the verification parent. Preserved -upstream story additions, review notes and classifications and all 37 new suites. -Compared changed catalog inputs with the reviewed step-2 snapshot: five feature -recipes, the generated feature index, BudgetIncidentCard/Costs, Inbox and the -recovery notice wiring changed. The two preview-hook lines remain as reviewed. -The new budget fixtures explicitly use hard thresholds; their action labels and -callbacks are retained. Inbox fixtures use human-created tasks; unrelated -automation discovery remains outside their asserted scope. Recovery fixtures use -generic exhaustion/unknown-outcome causes, not the newly gated native-owner path. -Recipe additions concern Telegram maintenance, liveness versus readiness, trusted -instance-secret lifecycle and native copyback verification, which these isolated -UI stories do not establish. Reviewed those differences, refreshed affected -fingerprints with scoped notes, and retained all statuses. No new live acceptance -or rendering evidence is claimed for the merge; the earlier 260-check pass names -its tested revision. Catalog/map validation and 27 targeted tests pass. - -## Draft-fixture isolation correction before merge — 2026-10-13 - -After #16167 merged as `252d9b5077`, retained the step-3 catalog and scenarios -while reconciling its squash-merged verification file. Review found that -`clearDraft` correctly refuses to clear a retained submission without its -matching attempt ID. Story setup/cleanup now passes that ID for the two -Storybook-owned draft keys before reseeding them. Production draft guards are -unchanged. The new same-browser check switches from UncertainSubmission to -Empty, SentClearsDraft and SendFailedKeepsDraft; it asserts the warning disappears -and the expected empty or retained draft is shown, with declared play passing. -All six draft stories plus that switching regression passed (seven browser -checks) on the owned macOS Chromium development preview after cold dependency -optimization. UI typecheck, 16 existing draft-persistence tests and the 27 -catalog/generator/map tests passed. No whole-suite browser rerun, production -submission journey or visual-baseline comparison is claimed for this narrow fix. - -Static merge verification: Storybook build passed after restoring the checkout's -renderer dependencies. All 2,248 original built IDs remain in the 2,517-entry -index. The 25 budget/inbox/recovery examples affected by upstream source changes, -six draft examples and same-browser reset check passed on the static preview -(32 checks). The reset check uses the sidebar for Empty and reloads send stories -within the same browser/storage context, so it cannot read the prior story's -completed play status while the new play starts. No isolated-context substitute -is used for the retained-submission regression. The unchanged GitHub bot-management -suite also passed locally (34 tests) after its CI assertion failed; a separate -server job reported cancellation. Those CI jobs require a fresh passing run. - -## Named play-result assertions — 2026-10-13 - -Strengthened four review cases: UnavailableCompanyDraft waits for the visible -wizard and an empty agent-name input before rejecting the foreign draft; Probing -asserts a disabled Testing button; FilterNoMatches asserts the filtered empty -message and absence of the seeded run; Delivering asserts the queue's optimistic -removal after clicking a loaded row. The shipped queue returns null while that -delivery remains pending, so this story records the missing visible progress -presentation rather than inventing it. All four browser cases passed on the -owned preview, as did UI typecheck and 27 catalog/generator/map tests. - -## Codex and UI-gap catalog reconciliation — 2026-10-13 - -Reconciled Codex `6c0eca871616a110954553d6ff971e7655c85f93` with master -`c8efdbfba43377d39f57e4822e92d796a8a044b6`. Retained all 226 existing suites -and all 37 incoming UI-gap suites, both dated review histories, stable IDs, -classifications and simulation boundaries. The catalog now contains 263 authored -files and 2,499 stories. The incoming verification routes remain separate from -production acceptance. Earlier browser results retain their exact tested sources. - -Inspected the combined inputs before refreshing three new-suite fingerprints -and shared setup. The backup recipe paragraph only moves to operator verification; -the merged import page and onboarding wizard retain exact Codex source bytes. -Their new fixture notes name the native setup, import persistence, credential, -provider and cleanup journeys these isolated stories do not prove. No application, -package or native source was changed by this reconciliation. - -The existing catalog generator/checker, all 27 catalog/generator/map controls and -the 35-area/175-capability map check pass. This is source inventory and structural -verification only: no additional rendering, play, visual baseline, paid provider -call or live production acceptance was performed. - -## Draft reload and retained-file recovery reconciliation — 2026-10-13 - -Reconciled candidate `12046f522bca29ded24425be71b856993b4997f7` with master -`393d1c410862aa93561548e0a39feec3b89df6ff`. Retained every authored suite, stable -ID, classification, capability association and both review histories. The catalog -contains 263 files and 2,503 authored story IDs, including the four incoming -retained-file recovery states. Combined five notes that changed on both branches -so neither the Codex nor recovery limitations were discarded. - -Reviewed the fixed OnboardingWizard opening/draft logic and the onboarding and -managed-credential verification recipes before refreshing 33 affected source -fingerprints. The wizard component controls cover authorized reload, delayed -company context, explicit opening and foreign-company isolation; they do not -close the recorded managed first-task reload failure. The merged IssueDetail -passes the current task status and board runtime/recovery authority to the -retained-file form. Its fixture stories do not verify real recovered files, -provider shutdown or saved-account cleanup. Shared setup is unchanged. - -This reconciliation records source inventory only. Existing rendering, play and -production results retain their literal tested revisions; no new browser run, -visual baseline, provider call or live acceptance is claimed. - -The maintained catalog/index checker, all 27 catalog/generator/map controls and -the 35-area/175-capability structural map check pass. No unowned generated -artifacts or authored story files changed during this reconciliation. - -## Fresh-task isolation recipe reconciliation — 2026-10-13 - -Reconciled candidate `736d32682290fe9d6c3157e47a36b31a431fb45c` with master -`c7f4b74111d16f0b57112fa6d0b6a59c2d63bfe8`. The auto-merged catalog retains -all 263 suites and 2,503 authored story IDs, both review histories, the Codex -suite and all four retained-file recovery states. Regenerated the conflicted -index from that combined catalog. Classifications and simulated-data boundaries -remain unchanged. - -Inspected the incoming workspace recipe: implicit repository defaults must use -a separately admitted remote checkout when shared Git storage overlaps private -task work, with lifecycle and current-default provenance guards. Its catalog -notes explicitly leave cloning, admission and live recovery outside these UI -fixtures. The incoming reviewed fingerprints already match the merged source; -none were silently refreshed. This is source inventory reconciliation only, -not new browser, provider or production acceptance. - -The maintained catalog/index checker, all 27 catalog/generator/map controls and -the 35-area/175-capability structural map check pass. No authored story or -application source was changed by this reconciliation. diff --git a/maps/storybook-map/VERIFICATION.md b/maps/storybook-map/VERIFICATION.md deleted file mode 100644 index 41f240f1e08..00000000000 --- a/maps/storybook-map/VERIFICATION.md +++ /dev/null @@ -1,172 +0,0 @@ -# Verification routes for Storybook capabilities - -Updated 2026-10-13. Source inventory is reconciled from candidate `736d326822` and master `c7f4b74111`; the prior authorized draft reload and retained-file recovery reviews are preserved alongside the inspected fresh-task source-isolation recipe. - -The catalog has 263 authored suites, 2,503 authored story IDs and 175 feature-map capabilities. The 37 new production-subject suites add 257 scenarios and associate all 49 UI capabilities identified in step 2. **11 capabilities remain without authored examples: 8 CLI/operator operations and 3 real-browser concerns.** Generated Overview pages and guides do not count as examples. Existing suites and story IDs are retained. The four retained-file recovery states from master `393d1c4108` are preserved alongside the Codex suite and examples previously merged from master `c8efdbfba43`; this inventory update does not claim an additional production verification run. - -These associations provide initial isolated UI coverage, not complete parity with every feature recipe. The original scenario inventory below stays as a maintenance checklist; an association does not mark every listed variant complete. In particular, import examples cover preview, organization archival examples cover the list/restoration side, and custom-image examples cover metadata/configuration rather than a real setup terminal. Existing unreviewed suites remain unreviewed. - -A story can establish component rendering, fixture shape and asserted interaction. It cannot establish real authentication, permissions, persisted changes, run continuation, provider delivery or installation. **The production journeys listed below have not been run as part of this Storybook pass.** Existing test links identify starting points, not exhaustive or passing production acceptance evidence. - -## New example suites - -All subjects use shipped components. APIs, socket messages, callbacks and storage seeds are simulated. Review results and source limitations are recorded in the catalog; the focused browser command is: - -```sh -pnpm build-storybook -node scripts/serve-storybook-static.mjs --port 6136 -# In a second terminal: -pnpm exec playwright test --config tests/storybook-visual/feature-gap-stories.config.ts -``` - -The static server must be an owned process serving this checkout. Override the browser target with `PAPERCLIP_GAP_STORYBOOK_URL` when using another owned port. The browser suite asserts each non-interactive story's expected content, skeleton or documented fallback and waits for declared play assertions; it also checks reset when switching token and uncertain-draft stories in one browser. This is not the pinned Linux visual-baseline comparison. - -| Suite | Capability associations | Scenarios / play functions | -| --- | --- | --- | -| [Getting started and access/Login, invitations, and access/CLI authorization](../../ui/storybook/stories/access/cli-authorization.stories.tsx) | `access/cli-auth` | 9 / 5 | -| [Getting started and access/Login, invitations, and access/Organization membership](../../ui/storybook/stories/access/membership.stories.tsx) | `access/membership` | 7 / 2 | -| [Getting started and access/Login, invitations, and access/Sign in](../../ui/storybook/stories/access/sign-in.stories.tsx) | `access/login` | 6 / 3 | -| [Oversight and operation/Dashboards and audit trails/Execution history](../../ui/storybook/stories/activity/run-audit.stories.tsx) | `activity/runs` | 6 / 4 | -| [Tasks and conversations/Agent conversations and project handoff/Conference Room](../../ui/storybook/stories/agent-chat/conference-room.stories.tsx) | `agent-chat/conference-room` | 5 / 4 | -| [Apps, channels, and extensions/App access and action permissions/Review newly discovered actions](../../ui/storybook/stories/app-permissions/catalog-review.stories.tsx) | `app-permissions/catalog-change` | 7 / 2 | -| [Oversight and operation/Costs and budgets/Resolve a budget incident](../../ui/storybook/stories/budgets-costs/budget-resolution.stories.tsx) | `budgets-costs/resolution` | 10 / 6 | -| [Automation and structured work/Cases/Browse and hierarchy](../../ui/storybook/stories/cases/case-browse.stories.tsx) | `cases/browse` | 5 / 1 | -| [Automation and structured work/Cases/Structure, history and task links](../../ui/storybook/stories/cases/case-detail.stories.tsx) | `cases/structure`, `cases/history`, `cases/task-links` | 8 / 4 | -| [Apps, channels, and extensions/External chat and email/Task-linked files](../../ui/storybook/stories/chat-channels/channel-attachments.stories.tsx) | `chat-channels/attachments` | 5 / 2 | -| [Getting started and access/Companies and portability/Import preview](../../ui/storybook/stories/companies/company-import.stories.tsx) | `companies/portability` | 6 / 5 | -| [Getting started and access/Companies and portability/Selection and archived organizations](../../ui/storybook/stories/companies/company-selection.stories.tsx) | `companies/selection`, `companies/archive` | 7 / 2 | -| [Tasks and conversations/Documents, attachments, and work products/Document revisions](../../ui/storybook/stories/documents-artifacts/document-revisions.stories.tsx) | `documents-artifacts/documents` | 9 / 4 | -| [Projects and execution/Execution environments/Custom images](../../ui/storybook/stories/execution-environments/custom-images.stories.tsx) | `execution-environments/images` | 6 / 3 | -| [Projects and execution/Execution environments/Configuration, capabilities, and probes](../../ui/storybook/stories/execution-environments/environment-states.stories.tsx) | `execution-environments/configuration`, `execution-environments/capabilities`, `execution-environments/probe` | 10 / 4 | -| [Apps, channels, and extensions/Tool gateways and access profiles/Named gateway tokens](../../ui/storybook/stories/gateways-profiles/gateway-tokens.stories.tsx) | `gateways-profiles/tokens` | 8 / 5 | -| [Projects and execution/Goals and work alignment/Aligned work and navigation](../../ui/storybook/stories/goals/goal-alignment.stories.tsx) | `goals/alignment`, `goals/navigation` | 6 / 2 | -| [Tasks and conversations/Inbox, decisions, and search/Personal task views](../../ui/storybook/stories/inbox-search/inbox-views.stories.tsx) | `inbox-search/views` | 8 / 0 | -| [Tasks and conversations/Inbox, decisions, and search/Personal task notifications](../../ui/storybook/stories/inbox-search/personal-task-toasts.stories.tsx) | `inbox-search/toasts` | 4 / 4 | -| [Oversight and operation/Instance operations/Backup retention](../../ui/storybook/stories/instance-operations/backup-retention.stories.tsx) | `instance-operations/backup`, `instance-operations/configuration` | 6 / 6 | -| [Oversight and operation/Navigation, profile, and announcements/Sidebar preferences](../../ui/storybook/stories/navigation-preferences/sidebar-preferences.stories.tsx) | `navigation-preferences/preferences` | 5 / 1 | -| [Getting started and access/Onboarding and first work/Resume a saved draft](../../ui/storybook/stories/onboarding/resume-draft.stories.tsx) | `onboarding/resume` | 4 / 3 | -| [Automation and structured work/Pipelines, review queues, and learnings/Learnings](../../ui/storybook/stories/pipelines/learnings.stories.tsx) | `pipelines/learnings` | 5 / 1 | -| [Automation and structured work/Pipelines, review queues, and learnings/Items](../../ui/storybook/stories/pipelines/pipeline-board.stories.tsx) | `pipelines/items` | 5 / 1 | -| [Automation and structured work/Pipelines, review queues, and learnings/Review queue](../../ui/storybook/stories/pipelines/review-queue.stories.tsx) | `pipelines/review` | 7 / 3 | -| [Automation and structured work/Pipelines, review queues, and learnings/Stage settings](../../ui/storybook/stories/pipelines/stage-settings.stories.tsx) | `pipelines/stages` | 5 / 2 | -| [Apps, channels, and extensions/Plugins/Configuration](../../ui/storybook/stories/plugins/plugin-configuration.stories.tsx) | `plugins/configuration` | 6 / 3 | -| [Apps, channels, and extensions/Plugins/Contributed routes](../../ui/storybook/stories/plugins/plugin-contributions.stories.tsx) | `plugins/contributions` | 4 / 1 | -| [Apps, channels, and extensions/Plugins/Installation and lifecycle](../../ui/storybook/stories/plugins/plugin-management.stories.tsx) | `plugins/installation`, `plugins/lifecycle` | 10 / 5 | -| [Projects and execution/Recovery/Exhaustion and user decisions](../../ui/storybook/stories/recovery/recovery-gap-states.stories.tsx) | `recovery/exhaustion`, `recovery/unknown-outcome` | 7 / 7 | -| [Automation and structured work/Routines, schedules, and triggers/Run now](../../ui/storybook/stories/routines/run-now.stories.tsx) | `routines/run-now` | 8 / 4 | -| [Apps, channels, and extensions/Secrets and proposals/Proposal review](../../ui/storybook/stories/secrets/proposal-review.stories.tsx) | `secrets/proposals` | 7 / 3 | -| [Agents and reusable capabilities/Skills and Skill Studio/Test runs](../../ui/storybook/stories/skills/skill-test-runs.stories.tsx) | `skills/testing` | 9 / 1 | -| [Automation and structured work/Status cards/Authoring, updates and archive](../../ui/storybook/stories/status-cards/status-card-states.stories.tsx) | `status-cards/authoring`, `status-cards/generation`, `status-cards/inspection`, `status-cards/archive` | 17 / 10 | -| [Tasks and conversations/Steering and queued messages/Draft recovery](../../ui/storybook/stories/steering/composer-draft-recovery.stories.tsx) | `steering/drafts` | 6 / 3 | -| [Tasks and conversations/Steering and queued messages/Accepted response delivery](../../ui/storybook/stories/steering/durable-response-queue.stories.tsx) | `steering/approval-queue`, `recovery/user-continuation` | 7 / 6 | -| [Projects and execution/Workspaces, services, and files/Close readiness](../../ui/storybook/stories/workspaces/workspace-close.stories.tsx) | `workspaces/closure` | 7 / 7 | - -## Production UI limitations exposed - -- Plugin contribution discovery errors remain on “Loading…”. The named DiscoveryFailure story exposes this shipped behavior; it does not claim a useful failure state. -- The document section and execution-environment list lack dedicated read-error/loading presentation. Cases and Inbox also fall back to empty views after list errors. Their stories retain the real fallback behavior. Custom-image metadata has its own loading and error states. -- GoalDetail displays aligned projects and children. The current UI has no project goal-assignment control. The stories do not invent one. -- Accepted queued responses disappear optimistically while delivery is pending; the shipped component has no separate visible progress indicator. The Delivering story asserts this presentation. -- Conference Room maps a denied stream to its generic assistant-unavailable message. Real permission enforcement belongs to the separate route verification. - -## UI scenarios and separate production contracts - -These 49 capabilities now have initial shipped-component examples. Keep the requested scenarios below as the target for continued maintenance. Loading, empty, failure, permission and successful states are appropriate only when the production subject supports them. The separate production contracts remain required. - -| Capability | UI scenarios to maintain | Separate production evidence | Source and existing test starting points | -| --- | --- | --- | --- | -| [`onboarding/resume`](../feature-map/onboarding.md) | Restored incomplete wizard; invalid or unauthorized saved company; temporarily withheld draft; account switch; storage failure. | Reload company-prefixed onboarding without duplicating company; restore only authorized account/company draft and retain input after recoverable loading failure. | Source: [OnboardingWizard.tsx](../../ui/src/components/OnboardingWizard.tsx), [onboarding-state.ts](../../ui/src/lib/onboarding-state.ts). Tests: [OnboardingWizard.test.tsx](../../ui/src/components/OnboardingWizard.test.tsx), [onboarding-state.test.ts](../../ui/src/lib/onboarding-state.test.ts), [onboarding.spec.ts](../../tests/e2e/onboarding.spec.ts) | -| [`access/login`](../feature-map/access.md) | Sign-in form, pending and invalid credentials, deployment-mode claim gate, expired claim. | Authenticate and reload company deep link; sign out and confirm session enforcement; reject invalid bootstrap claim. | Source: [Auth.tsx](../../ui/src/pages/Auth.tsx), [BoardClaim.tsx](../../ui/src/pages/BoardClaim.tsx), [board-claim.ts](../../server/src/board-claim.ts). Tests: [Auth.test.tsx](../../ui/src/pages/Auth.test.tsx), [auth-session-route.test.ts](../../server/src/__tests__/auth-session-route.test.ts), [board-claim.test.ts](../../server/src/__tests__/board-claim.test.ts) | -| [`access/membership`](../feature-map/access.md) | Member and join-request lists; editable versus read-only roles; pending change, rejected request, revoked invite. | Persist role/membership changes; enforce actual actor authority, invite replay/expiry and cross-company denial. | Source: [CompanyAccess.tsx](../../ui/src/pages/CompanyAccess.tsx), [authz.ts](../../server/src/routes/authz.ts). Tests: [CompanyAccess.test.tsx](../../ui/src/pages/CompanyAccess.test.tsx), [invite-accept-replay.test.ts](../../server/src/__tests__/invite-accept-replay.test.ts), [multi-user-authenticated.spec.ts](../../tests/e2e/multi-user-authenticated.spec.ts) | -| [`access/cli-auth`](../feature-map/access.md) | CLI authorization approval, pending, expired/denied and already-authorized states. | Authorize intended CLI identity/context, make scoped request, revoke current server token and retry same bearer; logout alone is insufficient. | Source: [CliAuth.tsx](../../ui/src/pages/CliAuth.tsx). Tests: [cli-auth-routes.test.ts](../../server/src/__tests__/cli-auth-routes.test.ts), [board-auth.test.ts](../../cli/src/__tests__/board-auth.test.ts), [token.test.ts](../../cli/src/__tests__/token.test.ts) | -| [`companies/selection`](../feature-map/companies.md) | Company list/create/switcher; empty, loading, error, unavailable company and switched navigation. | Switch and reload between companies; verify tasks/agents/cache/routes remain scoped and unauthorized company requests fail. | Source: [Companies.tsx](../../ui/src/pages/Companies.tsx), [CompanySwitcher.tsx](../../ui/src/components/CompanySwitcher.tsx), [CompanyContext.tsx](../../ui/src/context/CompanyContext.tsx). Tests: [Companies.test.tsx](../../ui/src/pages/Companies.test.tsx), [CompanyContext.test.tsx](../../ui/src/context/CompanyContext.test.tsx), [companies-route-cross-company-authz.test.ts](../../server/src/__tests__/companies-route-cross-company-authz.test.ts) | -| [`companies/archive`](../feature-map/companies.md) | Archive confirmation, pending/error and departure navigation; archived list entry and Unarchive action. | Archive eligible agents/runs without deleting history; restoration handles archival-specific pause and navigates to correct company. | Source: [CompanySettings.tsx](../../ui/src/pages/CompanySettings.tsx), [Companies.tsx](../../ui/src/pages/Companies.tsx), [companies.ts](../../ui/src/api/companies.ts). Tests: [CompanySettingsArchive.test.tsx](../../ui/src/pages/CompanySettingsArchive.test.tsx), [Companies.test.tsx](../../ui/src/pages/Companies.test.tsx), [companies-service.test.ts](../../server/src/__tests__/companies-service.test.ts) | -| [`companies/portability`](../feature-map/companies.md) | Import/export preview, conflict choice, warnings, async progress/failure/success and restricted managed deployment. | Apply real small package to disposable target; inspect counts/references/conflicts, source immutability and credential exclusions; imported task requires separate runnable-account proof. | Source: [CompanyImport.tsx](../../ui/src/pages/CompanyImport.tsx), [CompanyExport.tsx](../../ui/src/pages/CompanyExport.tsx), [companies.ts](../../ui/src/api/companies.ts). Tests: [CompanyImport.test.tsx](../../ui/src/pages/CompanyImport.test.tsx), [CompanyExport.test.tsx](../../ui/src/pages/CompanyExport.test.tsx), [company-portability-routes.test.ts](../../server/src/__tests__/company-portability-routes.test.ts), [company-import-export-e2e.test.ts](../../cli/src/__tests__/company-import-export-e2e.test.ts) | -| [`inbox-search/views`](../feature-map/inbox-search.md) | Mine/Recent/Unread/Blocked and broader task views; combined versus standalone host; loading/empty/error/filter states. | Use persisted personal participation/read data; verify scoped counts and list navigation/reload; automatic read cleanup must not create Mine membership. | Source: [Inbox.tsx](../../ui/src/pages/Inbox.tsx), [Issues.tsx](../../ui/src/pages/Issues.tsx). Tests: [Inbox.test.tsx](../../ui/src/pages/Inbox.test.tsx), [Issues.test.tsx](../../ui/src/pages/Issues.test.tsx), [issues-service.test.ts](../../server/src/__tests__/issues-service.test.ts) | -| [`inbox-search/toasts`](../feature-map/inbox-search.md) | Eligible live task toast, explicit mention, quiet unrelated event, own-action/visible-task suppression, dedupe and company/account switch. | Persisted participation and mentions determine per-viewer socket eligibility; quiet events still refresh caches; reload retains eligibility, unauthorized resources remain denied. | Source: [ToastViewport.tsx](../../ui/src/components/ToastViewport.tsx), [ToastContext.tsx](../../ui/src/context/ToastContext.tsx), [LiveUpdatesProvider.tsx](../../ui/src/context/LiveUpdatesProvider.tsx), [task-toast-eligibility.ts](../../server/src/realtime/task-toast-eligibility.ts). Tests: [ToastContext.test.tsx](../../ui/src/context/ToastContext.test.tsx), [ToastViewport.test.tsx](../../ui/src/components/ToastViewport.test.tsx), [LiveUpdatesProvider.hook.test.tsx](../../ui/src/context/LiveUpdatesProvider.hook.test.tsx), [task-toast-eligibility.test.ts](../../server/src/__tests__/task-toast-eligibility.test.ts), [live-events-toast.test.ts](../../server/src/__tests__/live-events-toast.test.ts), [multi-user-authenticated.spec.ts](../../tests/e2e/multi-user-authenticated.spec.ts) | -| [`agent-chat/conference-room`](../feature-map/agent-chat.md) | Conference-room flag disabled, empty/history/reply, busy and explicit failure states. | Exercise separate BoardChat route gate, local-trusted deployment and authenticated Claude CLI; send/reload real conversation with responding agent attribution. | Source: [BoardChat.tsx](../../ui/src/pages/BoardChat.tsx), [board-chat.ts](../../server/src/routes/board-chat.ts). Tests: [BoardChat.test.tsx](../../ui/src/pages/BoardChat.test.tsx), [board-chat-route-feature-flag.test.ts](../../server/src/__tests__/board-chat-route-feature-flag.test.ts) | -| [`steering/drafts`](../feature-map/steering.md) | Task-keyed restored draft and attachment receipts; task switch/reload, failed send and uncertain-save recovery. | Retain correct task draft across navigation and reload; inspect authoritative saved receipt before claiming delivery; do not clear storage on every harness mount. | Source: [TaskChatComposer.tsx](../../ui/src/components/task-chat/TaskChatComposer.tsx), [composer-draft.ts](../../ui/src/lib/composer-draft.ts). Tests: [TaskChatComposer.test.tsx](../../ui/src/components/task-chat/TaskChatComposer.test.tsx), [issue-queued-comments-routes.test.ts](../../server/src/__tests__/issue-queued-comments-routes.test.ts) | -| [`steering/approval-queue`](../feature-map/steering.md) | Answered question/accepted approval delivery waiting, eligible steer/interrupt, failed delivery and fresh-session-only approval. | Keep response delivery durable and distinct from editable comments; coalesce once, enforce fresh-session restrictions and deduplicate concurrent/retried continuation. | Source: [TaskChatQueuedMessages.tsx](../../ui/src/components/task-chat/TaskChatQueuedMessages.tsx), [question-response-delivery.ts](../../server/src/services/question-response-delivery.ts). Tests: [TaskChatQueuedMessages.test.tsx](../../ui/src/components/task-chat/TaskChatQueuedMessages.test.tsx), [question-response-delivery.test.ts](../../server/src/__tests__/question-response-delivery.test.ts), [issue-queued-comments-routes.test.ts](../../server/src/__tests__/issue-queued-comments-routes.test.ts) | -| [`documents-artifacts/documents`](../feature-map/documents-artifacts.md) | Writable/read-only document, save pending/failure/conflict, revision history/historical preview and restore confirmation. | Persist edited body and reload; append-only restore creates new revision; reject stale writes and inaccessible company/task. | Source: [IssueDocumentsSection.tsx](../../ui/src/components/IssueDocumentsSection.tsx), [TaskDocumentPanel.tsx](../../ui/src/components/task-side-panel/TaskDocumentPanel.tsx), [documents.ts](../../server/src/services/documents.ts). Tests: [IssueDocumentsSection.test.tsx](../../ui/src/components/IssueDocumentsSection.test.tsx), [document-revisions.test.ts](../../ui/src/lib/document-revisions.test.ts), [documents-service.test.ts](../../server/src/__tests__/documents-service.test.ts), [issue-document-restore-routes.test.ts](../../server/src/__tests__/issue-document-restore-routes.test.ts) | -| [`skills/testing`](../feature-map/skills.md) | Studio test inputs/configuration, running, question/approval, result and failed test states. | Run bounded test of actual saved version with correct selected account/environment; inspect persisted test detail and eligible interaction response. | Source: [SkillStudio.tsx](../../ui/src/pages/SkillStudio.tsx), [companySkills.ts](../../ui/src/api/companySkills.ts). Tests: [SkillStudio.test.tsx](../../ui/src/pages/SkillStudio.test.tsx), [company-skill-test-runs-service.test.ts](../../server/src/__tests__/company-skill-test-runs-service.test.ts) | -| [`goals/alignment`](../feature-map/goals.md) | Project/task goal selection, explicit/inherited context and invalid association error. | Persist same-company valid association, reject invalid/cross-company reference, verify explicit versus inherited server context after reload. | Source: [ProjectProperties.tsx](../../ui/src/components/ProjectProperties.tsx), [GoalDetail.tsx](../../ui/src/pages/GoalDetail.tsx). Tests: [project-goal-validation.test.ts](../../server/src/__tests__/project-goal-validation.test.ts), [issues-goal-context-routes.test.ts](../../server/src/__tests__/issues-goal-context-routes.test.ts), [issue-goal-fallback.test.ts](../../server/src/__tests__/issue-goal-fallback.test.ts), [project-goal.test.ts](../../cli/src/__tests__/project-goal.test.ts) | -| [`goals/navigation`](../feature-map/goals.md) | Parent/child goal and project/task context links, empty/unavailable context and permitted destination. | Follow actual goal/project/task records and compare explicit versus inherited context; ensure reload and inaccessible destination behavior. | Source: [GoalDetail.tsx](../../ui/src/pages/GoalDetail.tsx), [GoalProperties.tsx](../../ui/src/components/GoalProperties.tsx). Tests: [GoalDetail.test.tsx](../../ui/src/pages/GoalDetail.test.tsx), [issues-goal-context-routes.test.ts](../../server/src/__tests__/issues-goal-context-routes.test.ts), [issue-goal-fallback.test.ts](../../server/src/__tests__/issue-goal-fallback.test.ts) | -| [`workspaces/closure`](../feature-map/workspaces.md) | Close-readiness checks, pending changes/active runs, blocked/pending/error close, retry close and eligible reopening. | Confirm owned workspace shutdown, preserved files/Git state and permitted lifecycle transition/reopening; Browser Use session closure is unrelated. | Source: [ExecutionWorkspaceDetail.tsx](../../ui/src/pages/ExecutionWorkspaceDetail.tsx), [ExecutionWorkspaceCloseDialog.tsx](../../ui/src/components/ExecutionWorkspaceCloseDialog.tsx), [execution-workspaces.ts](../../server/src/routes/execution-workspaces.ts). Tests: [execution-workspaces-routes.test.ts](../../server/src/__tests__/execution-workspaces-routes.test.ts), [execution-workspaces-service.test.ts](../../server/src/__tests__/execution-workspaces-service.test.ts), [execution-workspace-reopen.test.ts](../../server/src/__tests__/execution-workspace-reopen.test.ts) | -| [`execution-environments/configuration`](../feature-map/execution-environments.md) | Local/SSH/sandbox editors; unavailable providers, missing credentials, save pending/error and restricted operator. | Persist target configuration and enforce instance-admin/local-operator mutation boundary; target catalog is instance-scoped. | Source: [CompanyEnvironments.tsx](../../ui/src/pages/CompanyEnvironments.tsx), [environments.ts](../../server/src/routes/environments.ts). Tests: [CompanyEnvironments.test.tsx](../../ui/src/pages/CompanyEnvironments.test.tsx), [environment-service.test.ts](../../server/src/__tests__/environment-service.test.ts) | -| [`execution-environments/capabilities`](../feature-map/execution-environments.md) | Supported versus unavailable driver/provider controls and interactive-setup/template-capture limitations. | Verify advertised driver/plugin capabilities match operations; unavailable provider cannot become working target; capability discovery must not allocate sandbox. | Source: [CompanyEnvironments.tsx](../../ui/src/pages/CompanyEnvironments.tsx), [environments.ts](../../ui/src/api/environments.ts). Tests: [environment-capability-contract.test.ts](../../server/src/__tests__/environment-capability-contract.test.ts), [environment-execution-target-capabilities.test.ts](../../server/src/__tests__/environment-execution-target-capabilities.test.ts), [plugin-environment-driver-sandbox-capabilities.test.ts](../../server/src/__tests__/plugin-environment-driver-sandbox-capabilities.test.ts) | -| [`execution-environments/probe`](../feature-map/execution-environments.md) | Remote Test pending, success, reachability/auth failure and platform qualification absent/invalidated notice. | Probe actual owned target; verify selected saved immutable config/image/company qualification plus lease cleanup; local API probe proves host/cwd only and has no UI Test button. | Source: [CompanyEnvironments.tsx](../../ui/src/pages/CompanyEnvironments.tsx), [environment-probe.ts](../../server/src/services/environment-probe.ts). Tests: [CompanyEnvironments.test.tsx](../../ui/src/pages/CompanyEnvironments.test.tsx), [environment-probe.test.ts](../../server/src/__tests__/environment-probe.test.ts), [environment-live-ssh.test.ts](../../server/src/__tests__/environment-live-ssh.test.ts) | -| [`execution-environments/images`](../feature-map/execution-environments.md) | Custom-image setup/capture/progress, terminal connect/disconnect/failure, unsupported capability and active-image drift. | Execute owned provider setup/capture/probe/terminal transport with correct saved image identity, authority, cleanup and shutdown; terminal screenshot cannot prove operation. | Source: [CompanyEnvironments.tsx](../../ui/src/pages/CompanyEnvironments.tsx), [environment-custom-images.ts](../../server/src/services/environment-custom-images.ts). Tests: [CompanyEnvironments.test.tsx](../../ui/src/pages/CompanyEnvironments.test.tsx), [environment-custom-images-service.test.ts](../../server/src/__tests__/environment-custom-images-service.test.ts) | -| [`recovery/exhaustion`](../feature-map/recovery.md) | Exhausted/overdue attempts, operator retry pending/error, blocked authority/gate and specific escalation. | Inspect durable attempt bounds and actual eligible retry/repair; acknowledgment alone does not prove continued execution. | Source: [IssueRecoveryActionCard.tsx](../../ui/src/components/IssueRecoveryActionCard.tsx), [DispositionRecoveryNotice.tsx](../../ui/src/components/DispositionRecoveryNotice.tsx), [issue-recovery-actions.ts](../../server/src/services/issue-recovery-actions.ts). Tests: [IssueRecoveryActionCard.test.tsx](../../ui/src/components/IssueRecoveryActionCard.test.tsx), [DispositionRecoveryNotice.test.tsx](../../ui/src/components/DispositionRecoveryNotice.test.tsx), [issue-recovery-actions.test.ts](../../server/src/__tests__/issue-recovery-actions.test.ts), [recovery.spec.ts](../../tests/e2e/execution-recovery/recovery.spec.ts) | -| [`recovery/unknown-outcome`](../feature-map/recovery.md) | Uncertain external outcome, required inspection/evidence and explicit permitted operator decision. | Corroborate provider outcome before authorization; enforce no automatic external side-effect replay and reject stale/unauthorized decisions. | Source: [IssueRecoveryActionCard.tsx](../../ui/src/components/IssueRecoveryActionCard.tsx), [issue-recovery-actions.ts](../../server/src/services/issue-recovery-actions.ts). Tests: [IssueRecoveryActionCard.test.tsx](../../ui/src/components/IssueRecoveryActionCard.test.tsx), [issue-recovery-actions.test.ts](../../server/src/__tests__/issue-recovery-actions.test.ts), [recovery.spec.ts](../../tests/e2e/execution-recovery/recovery.spec.ts) | -| [`recovery/user-continuation`](../feature-map/recovery.md) | Saved follow-up waiting on stop cleanup, pause/budget gate, one eligible continuation and result/failure. | Confirm previous execution stopped before delivery, preserve message, avoid duplicate wakes and honor actual task/ancestor/budget gate in separate legacy/native paths. | Source: [TaskChatQueuedMessages.tsx](../../ui/src/components/task-chat/TaskChatQueuedMessages.tsx), [legacy-continuation.ts](../../server/src/services/recovery/legacy-continuation.ts), [native-restart-recovery.ts](../../server/src/services/native-runtime/native-restart-recovery.ts). Tests: [legacy-continuation.test.ts](../../server/src/services/recovery/legacy-continuation.test.ts), [native-restart-recovery.test.ts](../../server/src/services/native-runtime/native-restart-recovery.test.ts), [issue-queued-comments-routes.test.ts](../../server/src/__tests__/issue-queued-comments-routes.test.ts), [legacy-failure-continuation.spec.ts](../../tests/e2e/legacy-failure-continuation.spec.ts) | -| [`app-permissions/catalog-change`](../feature-map/app-permissions.md) | Mount PermissionsPanel/AppDetail with quarantined actions, selection/review, refresh pending, empty and failed discovery states. Existing auto-allowed NewToolsAllowed examples are not quarantine review. | Exercise catalog refresh and new-tool review with permitted/denied actors; unreviewed actions stay quarantined, prior Off/Ask choices survive refresh, and approved review persists. | Source: [PermissionsPanel.tsx](../../ui/src/pages/apps/app-detail/PermissionsPanel.tsx), [AppDetail.tsx](../../ui/src/pages/apps/AppDetail.tsx), [tool-access.ts](../../server/src/routes/tool-access.ts). Tests: [AppDetail.test.tsx](../../ui/src/pages/apps/AppDetail.test.tsx), [tool-access-service.test.ts](../../server/src/__tests__/tool-access-service.test.ts), [tool-access-policy-service.test.ts](../../server/src/__tests__/tool-access-policy-service.test.ts) | -| [`chat-channels/attachments`](../feature-map/chat-channels.md) | Mount TaskChatBubble attachments and ChatEndpointDetail provider-specific consent/upload/delivery failure and unknown-outcome states. Local email attachment dialog remains a prototype. | Transfer a disposable supported file through each affected provider; verify recipient delivery, read scope, duplicate/replay handling and failure/unknown state without treating notification as file-upload proof. | Source: [TaskChatBubble.tsx](../../ui/src/components/task-chat/TaskChatBubble.tsx), [ChatEndpointDetail.tsx](../../ui/src/pages/apps/chat/ChatEndpointDetail.tsx), [chatEndpoints.ts](../../ui/src/api/chatEndpoints.ts), [chat-channels.ts](../../server/src/routes/chat-channels.ts). Tests: [TaskChatBubble.test.tsx](../../ui/src/components/task-chat/TaskChatBubble.test.tsx), [task-chat-attachments.test.ts](../../ui/src/components/task-chat/task-chat-attachments.test.ts), [chat-channels.integration.test.ts](../../server/src/__tests__/chat-channels.integration.test.ts), [issue-attachment-routes.test.ts](../../server/src/__tests__/issue-attachment-routes.test.ts) | -| [`gateways-profiles/tokens`](../feature-map/gateways-profiles.md) | Mount current TokensPanel with issue controls, once-only token reveal, expiry/actions, revocation confirmation and failures. Old GatewaysTab fixtures and assistant OAuth revocation are insufficient. | Issue bounded token via POST /tool-gateway/gateways/{id}/tokens; call allowed and excluded tools; revoke via /tool-gateway/gateway-tokens/{id}/revoke and verify denial using same client. | Source: [TokensPanel.tsx](../../ui/src/pages/apps/gateways/panels/TokensPanel.tsx), [tool-gateway.ts](../../server/src/routes/tool-gateway.ts), [tools.ts](../../ui/src/api/tools.ts). Tests: [TokensPanel.test.tsx](../../ui/src/pages/apps/gateways/panels/TokensPanel.test.tsx), [tool-gateway-service.test.ts](../../server/src/__tests__/tool-gateway-service.test.ts), [tool-gateway.test.ts](../../server/src/__tests__/tool-gateway.test.ts) | -| [`secrets/proposals`](../feature-map/secrets.md) | Mount ProposalsTab pending secret/binding proposals, blocked authority, expired/resolved proposal, approval/rejection pending/error, and redacted metadata. | GET /companies/{id}/secret-proposals and POST approve/reject must enforce company/admin/target authority, durable resolution and redaction; verified run-bound agent proposal creation is separate. | Source: [ProposalsTab.tsx](../../ui/src/pages/secrets/ProposalsTab.tsx), [secrets.ts](../../server/src/routes/secrets.ts), [secret-proposal-authorization.ts](../../server/src/services/secret-proposal-authorization.ts). Tests: [ProposalsTab.render.test.tsx](../../ui/src/pages/secrets/ProposalsTab.render.test.tsx), [secret-proposals-routes.test.ts](../../server/src/__tests__/secret-proposals-routes.test.ts) | -| [`plugins/installation`](../feature-map/plugins.md) | Mount PluginManager trusted package and bundled-local choices, pending install, validation/recoverable error and installed status. | POST /plugins/install on a disposable package; enforce instance install authority, trusted path/package validation and correct version. Package and local install are distinct. | Source: [PluginManager.tsx](../../ui/src/pages/PluginManager.tsx), [plugins.ts](../../server/src/routes/plugins.ts), [plugin-install-guard.ts](../../server/src/services/plugin-install-guard.ts). Tests: [plugin-install-route-security.test.ts](../../server/src/__tests__/plugin-install-route-security.test.ts), [plugin-install-autobuild.test.ts](../../server/src/__tests__/plugin-install-autobuild.test.ts), [plugin-routes-authz.test.ts](../../server/src/__tests__/plugin-routes-authz.test.ts) | -| [`plugins/configuration`](../feature-map/plugins.md) | Mount PluginSettings valid/invalid schema inputs, saved configuration, pending/failure and unavailable plugin. | GET/POST /plugins/{id}/config and POST config/test must preserve validation/company scope and deliver saved config to real plugin worker/startup. | Source: [PluginSettings.tsx](../../ui/src/pages/PluginSettings.tsx), [plugins.ts](../../server/src/routes/plugins.ts), [plugin-config-validator.ts](../../server/src/services/plugin-config-validator.ts). Tests: [PluginSettings.test.tsx](../../ui/src/pages/PluginSettings.test.tsx), [plugin-config-startup-delivery.test.ts](../../server/src/__tests__/plugin-config-startup-delivery.test.ts), [plugin-routes-authz.test.ts](../../server/src/__tests__/plugin-routes-authz.test.ts) | -| [`plugins/contributions`](../feature-map/plugins.md) | Mount PluginPage and CompanySettingsPluginPage contributed routes/tabs, loading, missing/unavailable plugin and action failures with a known fixture plugin. | Serve real static plugin UI; enforce bridge data/action host capabilities and company boundaries; exercise a harmless action and cold deep link. | Source: [PluginPage.tsx](../../ui/src/pages/PluginPage.tsx), [CompanySettingsPluginPage.tsx](../../ui/src/pages/CompanySettingsPluginPage.tsx), [plugins.ts](../../server/src/routes/plugins.ts), [plugin-ui-static.ts](../../server/src/routes/plugin-ui-static.ts). Tests: [PluginPage.test.tsx](../../ui/src/pages/PluginPage.test.tsx), [CompanySettingsPluginPage.test.tsx](../../ui/src/pages/CompanySettingsPluginPage.test.tsx), [plugin-ui-static.test.ts](../../server/src/__tests__/plugin-ui-static.test.ts), [plugin-tenant-isolation.test.ts](../../server/src/__tests__/plugin-tenant-isolation.test.ts) | -| [`plugins/lifecycle`](../feature-map/plugins.md) | Mount PluginManager active/disabled/uninstall/upgrade pending and failures; distinguish operator controls from developer watcher reload. | POST enable/disable and DELETE /plugins/{id} must stop worker/tool/managed-resource activity and clean owned resources; verify disposable restart/uninstall and developer watcher separately. | Source: [PluginManager.tsx](../../ui/src/pages/PluginManager.tsx), [plugins.ts](../../server/src/routes/plugins.ts), [plugin-lifecycle.ts](../../server/src/services/plugin-lifecycle.ts), [plugin-dev-watcher.ts](../../server/src/services/plugin-dev-watcher.ts). Tests: [plugin-lifecycle-restart.test.ts](../../server/src/__tests__/plugin-lifecycle-restart.test.ts), [plugin-routes-authz.test.ts](../../server/src/__tests__/plugin-routes-authz.test.ts), [plugin-dev-watcher.test.ts](../../server/src/__tests__/plugin-dev-watcher.test.ts) | -| [`routines/run-now`](../feature-map/routines.md) | Mount RoutineRunVariablesDialog through actual RoutineDetail with required/default inputs, project/workspace overrides, pending, blocked and failed submission. RunButton-only no-op examples do not supply/run inputs. | POST /routines/{id}/run must validate variables, create one attributed execution/task and obey pause/access/budget gates; inspect actual task outcome separately. | Source: [RoutineRunVariablesDialog.tsx](../../ui/src/components/RoutineRunVariablesDialog.tsx), [RoutineDetail.tsx](../../ui/src/pages/RoutineDetail.tsx), [routines.ts](../../server/src/routes/routines.ts). Tests: [RoutineRunVariablesDialog.test.tsx](../../ui/src/components/RoutineRunVariablesDialog.test.tsx), [routines-service.test.ts](../../server/src/__tests__/routines-service.test.ts), [routines-e2e.test.ts](../../server/src/__tests__/routines-e2e.test.ts) | -| [`pipelines/stages`](../feature-map/pipelines.md) | Mount PipelineSettings ordered stages, automation assignees/env, invalid transitions, unsaved state, saving and failed save. | POST/PATCH stages and PUT /pipelines/{id}/transitions must persist valid order/configuration, enforce ownership and reject invalid transitions; actual automation execution remains separate. | Source: [PipelineSettings.tsx](../../ui/src/pages/PipelineSettings.tsx), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [PipelineSettings.test.ts](../../ui/src/pages/PipelineSettings.test.ts), [pipelines-service.test.ts](../../server/src/__tests__/pipelines-service.test.ts), [pipelines-routes.test.ts](../../server/src/__tests__/pipelines-routes.test.ts) | -| [`pipelines/items`](../feature-map/pipelines.md) | Mount Pipelines/PipelineItemDetailView board grouping, item creation/details, stage/health/work references, empty/loading and failed transition. | GET/POST /pipelines/{id}/cases and POST /cases/{id}/transition must maintain company scope, valid stage changes and linked work; fixture stage state does not prove automation. | Source: [Pipelines.tsx](../../ui/src/pages/Pipelines.tsx), [PipelineWorkReferences.tsx](../../ui/src/components/PipelineWorkReferences.tsx), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [Pipelines.test.tsx](../../ui/src/pages/Pipelines.test.tsx), [pipelines-service.test.ts](../../server/src/__tests__/pipelines-service.test.ts), [pipelines-routes.test.ts](../../server/src/__tests__/pipelines-routes.test.ts), [pipelines-tutorial-flow.spec.ts](../../tests/e2e/pipelines-tutorial-flow.spec.ts) | -| [`pipelines/review`](../feature-map/pipelines.md) | Mount ReviewQueue and item review pending output/revision, accept/reject/request-changes, bulk selection, stale/conflicting submission and errors. | POST /cases/{id}/review and /companies/{id}/review-cases/bulk must authorize reviewer, persist correct outcome/transition and reject stale or invalid input. | Source: [Pipelines.tsx](../../ui/src/pages/Pipelines.tsx), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [Pipelines.test.tsx](../../ui/src/pages/Pipelines.test.tsx), [pipelines-routes.test.ts](../../server/src/__tests__/pipelines-routes.test.ts), [pipelines-service.test.ts](../../server/src/__tests__/pipelines-service.test.ts), [pipelines-tutorial-flow.spec.ts](../../tests/e2e/pipelines-tutorial-flow.spec.ts) | -| [`pipelines/learnings`](../feature-map/pipelines.md) | Mount actual Learnings export with filtered case events, review/forced-move entries, source links, empty/loading/error. This is event history, not a separately authored learning-record system. | GET /companies/{id}/case-events in pipelines routes needs existing company/access contract tests; a rendered event cannot establish learning quality. | Source: [Pipelines.tsx](../../ui/src/pages/Pipelines.tsx), [pipeline-learnings.ts](../../ui/src/lib/pipeline-learnings.ts), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [Pipelines.test.tsx](../../ui/src/pages/Pipelines.test.tsx), [pipelines-routes.test.ts](../../server/src/__tests__/pipelines-routes.test.ts), [pipelines-service.test.ts](../../server/src/__tests__/pipelines-service.test.ts) | -| [`cases/browse`](../feature-map/cases.md) | Mount Cases search/filter/sort/group/tree, matched-child parent context, persisted view choices, keyboard navigation and empty/loading/error. | GET /companies/{id}/cases scope/filter behavior is production evidence; rendered fixtures establish presentation only. Mutation/permission scenarios need real API checks separately. | Source: [Cases.tsx](../../ui/src/pages/Cases.tsx), [cases.ts](../../server/src/routes/cases.ts). Tests: [Cases.test.tsx](../../ui/src/pages/Cases.test.tsx), [cases-routes.test.ts](../../server/src/__tests__/cases-routes.test.ts) | -| [`cases/structure`](../feature-map/cases.md) | Mount CaseDetail and CaseFieldsPanel with arbitrary JSON fields and parent/children, matching descendants and unavailable child. Do not invent a general field editor or typed field validation. | GET /cases/{id} and /cases/{id}/children/tree must return permitted company records and correct relationships; changes/persistence require route tests separately. | Source: [CaseDetail.tsx](../../ui/src/pages/CaseDetail.tsx), [CaseFieldsPanel.tsx](../../ui/src/components/CaseFieldsPanel.tsx), [Cases.tsx](../../ui/src/pages/Cases.tsx), [cases.ts](../../server/src/routes/cases.ts), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [CaseFieldsPanel.test.tsx](../../ui/src/components/CaseFieldsPanel.test.tsx), [Cases.test.tsx](../../ui/src/pages/Cases.test.tsx), [CaseDetail.test.tsx](../../ui/src/pages/CaseDetail.test.tsx), [cases-routes.test.ts](../../server/src/__tests__/cases-routes.test.ts) | -| [`cases/history`](../feature-map/cases.md) | Mount CaseDetail activity and document revisions as distinct views, empty/loading/errors, attribution and source links. | GET /cases/{id}/events and /cases/{id}/documents/{key}/revisions require company/access filtering; a fixture list does not establish durable revision creation or restoration. | Source: [CaseDetail.tsx](../../ui/src/pages/CaseDetail.tsx), [cases.ts](../../server/src/routes/cases.ts). Tests: [CaseDetail.test.tsx](../../ui/src/pages/CaseDetail.test.tsx), [cases-routes.test.ts](../../server/src/__tests__/cases-routes.test.ts) | -| [`cases/task-links`](../feature-map/cases.md) | Mount CaseDetail and IssueCasesPanel related-task/case links in both directions, missing links and unavailable targets. | GET /issues/{id}/cases and /cases/{id}/issue-links must enforce permitted task/case relationships; production browser cold links verify destination and company context. | Source: [CaseDetail.tsx](../../ui/src/pages/CaseDetail.tsx), [IssueCasesPanel.tsx](../../ui/src/components/IssueCasesPanel.tsx), [cases.ts](../../server/src/routes/cases.ts), [pipelines.ts](../../server/src/routes/pipelines.ts). Tests: [IssueCasesPanel.test.tsx](../../ui/src/components/IssueCasesPanel.test.tsx), [CaseDetail.test.tsx](../../ui/src/pages/CaseDetail.test.tsx), [cases-routes.test.ts](../../server/src/__tests__/cases-routes.test.ts) | -| [`status-cards/authoring`](../feature-map/status-cards.md) | Mount CreateStatusCardDialog and StatusCardSettingsForm prompt, summarizer, refresh options, required/invalid inputs and save errors. | POST /companies/{id}/status-cards and PATCH /status-cards/{id} must enforce gate/author authority, save configuration and start expected compile task when prompt changes. | Source: [CreateStatusCardDialog.tsx](../../ui/src/pages/StatusCards/CreateStatusCardDialog.tsx), [StatusCardSettingsForm.tsx](../../ui/src/pages/StatusCards/StatusCardSettingsForm.tsx), [status-cards.ts](../../server/src/routes/status-cards.ts). Tests: [StatusCardSettingsForm.test.tsx](../../ui/src/pages/StatusCards/StatusCardSettingsForm.test.tsx), [status-cards.test.ts](../../server/src/__tests__/status-cards.test.ts) | -| [`status-cards/generation`](../feature-map/status-cards.md) | Mount card tile/drawer compiling, refreshing, failed, stale existing summary and successful new-summary states with linked task. | POST /status-cards/{id}/recompile and /refresh plus update/finalization engine must persist actual new output/history; compare saved summary with source tasks, not merely successful task status. | Source: [StatusCardTile.tsx](../../ui/src/pages/StatusCards/StatusCardTile.tsx), [StatusCardDetailDrawer.tsx](../../ui/src/pages/StatusCards/StatusCardDetailDrawer.tsx), [status-cards.ts](../../server/src/routes/status-cards.ts), [status-card-update-engine.ts](../../server/src/services/status-card-update-engine.ts). Tests: [StatusCardTile.test.tsx](../../ui/src/pages/StatusCards/StatusCardTile.test.tsx), [status-cards.test.ts](../../server/src/__tests__/status-cards.test.ts), [status-card-update-engine.test.ts](../../server/src/__tests__/status-card-update-engine.test.ts) | -| [`status-cards/inspection`](../feature-map/status-cards.md) | Mount StatusCardDetailDrawer summary, watched work, update/revision history, query debug, empty/loading/error and stale summary disclosure. | GET /status-cards/{id}, /updates, /summary-revisions and /dry-run must filter accessible card/source records; fixtures cannot establish summary truth or query authorization. | Source: [StatusCardDetailDrawer.tsx](../../ui/src/pages/StatusCards/StatusCardDetailDrawer.tsx), [status-cards.ts](../../server/src/routes/status-cards.ts). Tests: [StatusCardTile.test.tsx](../../ui/src/pages/StatusCards/StatusCardTile.test.tsx), [status-cards.test.ts](../../server/src/__tests__/status-cards.test.ts) | -| [`status-cards/archive`](../feature-map/status-cards.md) | Mount StatusCards and ArchivedStatusCardRow active/archived list, restore pending/failure and old-summary state. Archive differs from deletion. | PATCH /status-cards/{id} archived true/false must persist and authorize change; restore may enqueue refresh, whose new outcome must be inspected rather than treating old summary as current. | Source: [index.tsx](../../ui/src/pages/StatusCards/index.tsx), [ArchivedStatusCardRow.tsx](../../ui/src/pages/StatusCards/ArchivedStatusCardRow.tsx), [status-cards.ts](../../server/src/routes/status-cards.ts). Tests: [status-cards.test.ts](../../server/src/__tests__/status-cards.test.ts), [status-card-update-engine.test.ts](../../server/src/__tests__/status-card-update-engine.test.ts) | -| [`budgets-costs/resolution`](../feature-map/budgets-costs.md) | Mount BudgetIncidentCard with entered raised limit, invalid limit, keep-paused, applying, authorized/blocked and error states wired through actual host. Existing matrix handlers are no-ops. | POST /companies/{id}/budget-incidents/{id}/resolve must authorize scope-specific raise, persist resolution and resume eligible work while retaining overlapping budget/manual holds. | Source: [BudgetIncidentCard.tsx](../../ui/src/components/BudgetIncidentCard.tsx), [Costs.tsx](../../ui/src/pages/Costs.tsx), [budgets.ts](../../ui/src/api/budgets.ts), [costs.ts](../../server/src/routes/costs.ts), [budgets.ts](../../server/src/services/budgets.ts). Tests: [budgets-service.test.ts](../../server/src/__tests__/budgets-service.test.ts), [Costs.test.tsx](../../ui/src/pages/Costs.test.tsx) | -| [`activity/runs`](../feature-map/activity.md) | Mount AuditRuns selected status/agent/routine, linked task/agent, empty/loading/error/retry and 200-entry limit. Do not invent pagination. | GET /companies/{id}/heartbeat-runs and /routines/{id}/runs require company/read/privacy checks; real browser follows context links and confirms the referenced execution. | Source: [AuditRuns.tsx](../../ui/src/pages/audit/AuditRuns.tsx), [heartbeats.ts](../../ui/src/api/heartbeats.ts), [routines.ts](../../ui/src/api/routines.ts). Tests: [AuditRuns.test.tsx](../../ui/src/pages/audit/AuditRuns.test.tsx), [heartbeat-run-privacy-routes.test.ts](../../server/src/__tests__/heartbeat-run-privacy-routes.test.ts), [routines-service.test.ts](../../server/src/__tests__/routines-service.test.ts) | -| [`navigation-preferences/preferences`](../feature-map/navigation-preferences.md) | Mount Sidebar using real preference boundary with stars/order/collapse/recents state. Clearly distinguish in-memory section collapse, browser-local recents and server-saved stars/order. | GET/PUT /sidebar-preferences/me and /companies/{id}/sidebar-preferences/me plus stars must retain intended user/company isolation across reload and switch. Section collapse reopens after reload; global collapse is disabled. | Source: [Sidebar.tsx](../../ui/src/components/Sidebar.tsx), [sidebar-preferences.ts](../../server/src/routes/sidebar-preferences.ts), [sidebar-preferences.ts](../../server/src/services/sidebar-preferences.ts). Tests: [Sidebar.test.tsx](../../ui/src/components/Sidebar.test.tsx), [sidebar-preferences-routes.test.ts](../../server/src/__tests__/sidebar-preferences-routes.test.ts) | -| [`instance-operations/backup`](../feature-map/instance-operations.md) | Mount shipped InstanceGeneralSettings in CompanySettings with daily/weekly/monthly retention presets, selected values, saving/error/loading and cloud-hidden controls. Backup creation and restore remain separate CLI/operator checks. | PATCH /api/instance/settings/general must enforce instance settings authority and managed hidden fields, persist retention and survive reload. Separately inspect a real backup and restore a known record into a second disposable target; a successful write does not prove restoration. | Source: [InstanceGeneralSettings.tsx](../../ui/src/pages/InstanceGeneralSettings.tsx), [CompanySettings.tsx](../../ui/src/pages/CompanySettings.tsx), [instance-settings.ts](../../server/src/routes/instance-settings.ts), [db-backup.ts](../../cli/src/commands/db-backup.ts). Tests: [InstanceGeneralSettings.test.tsx](../../ui/src/pages/InstanceGeneralSettings.test.tsx), [instance-settings-routes.test.ts](../../server/src/__tests__/instance-settings-routes.test.ts), [instance-settings-managed-overlay.test.ts](../../server/src/__tests__/instance-settings-managed-overlay.test.ts), [instance-database-backups-routes.test.ts](../../server/src/__tests__/instance-database-backups-routes.test.ts) | - -## CLI and operator capabilities - -These eight capabilities do not need an authored Storybook example for their core operation. Keep them in the feature index: their lack of a story is intentional verification scope, not evidence that the product lacks the feature. UI portions of related capabilities remain in the section above. - -| Capability | Storybook scope | Required CLI/API/operator evidence | Source and existing test starting points | -| --- | --- | --- | --- | -| [`onboarding/instance`](../feature-map/onboarding.md) | No authored UI story required for host installation and startup. | Configure isolated data directory, start instance, confirm printed URL/identity/health, restart with saved configuration. | Source: [onboard.ts](../../cli/src/commands/onboard.ts), [onboard-service.ts](../../cli/src/onboard-service.ts). Tests: [onboard.test.ts](../../cli/src/__tests__/onboard.test.ts), [onboard-service.test.ts](../../cli/src/__tests__/onboard-service.test.ts), [test-drive.test.ts](../../cli/src/__tests__/test-drive.test.ts) | -| [`instance-operations/install-update`](../feature-map/instance-operations.md) | No authored story required for install, channel selection, update or rollback command execution. | Use an owned managed installation: check/dry-run, installed version, retained payload rollback and failure. Source-checkout guidance is a separate case; rollback does not undo database migrations. | Source: [index.ts](../../cli/src/index.ts), [install.ts](../../cli/src/commands/install.ts), [update.ts](../../cli/src/commands/update.ts). Tests: [install-command.test.ts](../../cli/src/__tests__/install-command.test.ts), [update-command.test.ts](../../cli/src/__tests__/update-command.test.ts) | -| [`instance-operations/diagnostics`](../feature-map/instance-operations.md) | No authored story required for doctor/health command results. | Run doctor against an owned data directory; check readiness and nonzero failures. A listening port alone does not prove readiness; repair requires observing the repaired result. | Source: [doctor.ts](../../cli/src/commands/doctor.ts). Tests: [doctor.test.ts](../../cli/src/__tests__/doctor.test.ts) | -| [`cli-operations/context`](../feature-map/cli-operations.md) | No authored story required for CLI profile/context selection. | Verify selected API origin, identity and company, JSON output and invalid-token/wrong-company failures. A persona label is not authentication. | Source: [context.ts](../../cli/src/commands/client/context.ts). Tests: [context.test.ts](../../cli/src/__tests__/context.test.ts), [http.test.ts](../../cli/src/__tests__/http.test.ts) | -| [`cli-operations/domain-commands`](../feature-map/cli-operations.md) | No authored story required for command parsing and domain API execution; corresponding product UI keeps its own story needs. | Discover registered help, use a disposable company, assert persisted mutations and denied operations with the actual actor. Command parity is not every endpoint passing live. | Source: [index.ts](../../cli/src/index.ts), [issue.ts](../../cli/src/commands/client/issue.ts). Tests: [operations-parity.test.ts](../../cli/src/__tests__/operations-parity.test.ts) | -| [`cli-operations/outputs`](../feature-map/cli-operations.md) | No authored story required for CLI document/asset/skill IO or machine-readable output. | Assert payload/schema, exit code, written contents, authorization and file integrity. Open the resulting document/asset in the product for cross-surface acceptance. | Source: [issue.ts](../../cli/src/commands/client/issue.ts), [asset.ts](../../cli/src/commands/client/asset.ts), [skill.ts](../../cli/src/commands/client/skill.ts). Tests: [issue-subresources.test.ts](../../cli/src/__tests__/issue-subresources.test.ts), [admin-asset-skill-parity.test.ts](../../cli/src/__tests__/admin-asset-skill-parity.test.ts) | -| [`cli-operations/run-controls`](../feature-map/cli-operations.md) | No authored story required for invoke/list/get/cancel/events/log command execution. | Assert the real run ID, event/log output and resulting state, eligible actor and cancellation denial. Printed success does not prove provider completion. | Source: [run.ts](../../cli/src/commands/client/run.ts), [heartbeat-run.ts](../../cli/src/commands/heartbeat-run.ts). Tests: [operations-parity.test.ts](../../cli/src/__tests__/operations-parity.test.ts) | -| [`cli-operations/worktree-instances`](../feature-map/cli-operations.md) | No authored story required for worktree initialize/seed/repair/cleanup commands. | Use only an owned isolated checkout/instance; verify paths, ports, health, login and seed provenance, then cleanup ownership. Capture evidence before teardown. | Source: [worktree.ts](../../cli/src/commands/worktree.ts), [test-drive.ts](../../cli/src/commands/test-drive.ts). Tests: [worktree.test.ts](../../cli/src/__tests__/worktree.test.ts), [test-drive.test.ts](../../cli/src/__tests__/test-drive.test.ts) | - -## Browser verification boundaries - -These three capabilities principally require the real browser, router or measurement harness. An isolated story can provide visual context, but does not prove routing, runtime gates or a performance budget. Navigation fallback presentation remains eligible for a small optional story. - -| Capability | Storybook scope | Required browser evidence | Source and existing test starting points | -| --- | --- | --- | --- | -| [`navigation-preferences/fallbacks`](../feature-map/navigation-preferences.md) | A NotFound rendering story can help polish, but missing-resource/legacy-deep-link capability principally needs real App/router/browser scenarios preserving company and query intent. | Cold-open invalid company/resource and retired URL; verify explicit fallback or correct canonical redirect without silently targeting a different resource/company. | Source: [NotFound.tsx](../../ui/src/pages/NotFound.tsx), [App.tsx](../../ui/src/App.tsx), [company-routes.ts](../../ui/src/lib/company-routes.ts). Tests: [App.activity-routing.test.tsx](../../ui/src/App.activity-routing.test.tsx), [App.cases-routing.test.tsx](../../ui/src/App.cases-routing.test.tsx), [App.test.tsx](../../ui/src/App.test.tsx), [company-routes.test.ts](../../ui/src/lib/company-routes.test.ts) | -| [`developer-labs/performance`](../feature-map/developer-labs.md) | A screenshot/story is optional context, not the required performance evidence. | Use existing browser performance harnesses. Record build/browser/data size, timing/trace and scrolling. Long-thread fixture has a disabled composer; task-chat HTML harness uses a plain textarea and simulated updates. | Source: [IssueChatLongThreadPerf.tsx](../../ui/src/pages/IssueChatLongThreadPerf.tsx), [README.md](../../tests/perf/task-chat/README.md), [README.md](../../tests/perf/issue-detail/README.md). Tests: [scrollback.spec.ts](../../tests/perf/task-chat/scrollback.spec.ts), [issue-detail.perf.spec.ts](../../tests/perf/issue-detail/issue-detail.perf.spec.ts) | -| [`developer-labs/route-gates`](../feature-map/developer-labs.md) | No isolated story required to prove actual route registration, redirects or gates; isolated gated-control examples remain useful. | Drive real routes under their actual development, experimental, production and fallback settings. Do not assume every lab is dev-only: global long-thread/lab/design routes also exist in production registration. | Source: [App.tsx](../../ui/src/App.tsx). Tests: No dedicated test asserted; use the feature recipe. | - -## Association revisit and retained gaps - -No further justified associations were found in this revisit of the 60 gaps. Existing lookalikes remain unlinked for concrete reasons: - -- `inbox-search/toasts`: `DismissUndoToast` is a dismissal receipt; `StopWithoutToasts` is local visible-task suppression. Neither demonstrates persisted personal participation/mention eligibility. The upstream notification capability is newly mapped by #16153, not an overlooked notification suite. -- `gateways-profiles/tokens`: assistant OAuth revocation is a different credential. Existing Gateway-tab token fixtures omit current fields such as `allowedActions`; inspect and repair their drift before advertising token coverage. -- `app-permissions/catalog-change`: automatically allowing new actions with an empty quarantine does not demonstrate review/quarantine. -- `documents-artifacts/documents`: the annotation edit mock increments a revision while returning unchanged body; it does not demonstrate saved edits or restoration. -- `steering/drafts`: mounting after clearing and seeding storage does not demonstrate draft recovery across task switching or reload. -- `routines/run-now` and `budgets-costs/resolution`: supplied dialogs/cards and no-op callbacks are useful presentation references, but do not yet provide the action/result scenarios for these capability links. - -These are retained examples and explicit limits, not reasons to delete suites. The prior association corrections remain intact. No suite classifications are promoted by this inventory. - -## Keeping this record current - -This downstream record is maintained with [maintain-storybook](../../.agents/skills/maintain-storybook/SKILL.md). When a feature is added or an example is associated, recompute the unassociated IDs from the feature map and non-guide catalog entries; update the rows/counts and source revision. Preserve the CLI/operator and browser reasons while no story exists. A new story removes a capability from this gap inventory only when its actual subject/actions justify the catalog association; it does not remove the production verification obligation. - -Use the [feature recipes](../feature-map/README.md) and [agent access companions](../agent-access-map/README.md) for authoritative journeys, actor restrictions and allowed/denied assertions. This record does not create a new API schema, alter access policy or redefine those maps. Record executed evidence separately in [REVIEW.md](REVIEW.md). - -For this pass, regenerate the downstream feature index for `inbox-search/toasts` and inspect its diff. The five inbox-suite fingerprints changed only through the inspected upstream recipe; the guide/shared fingerprints also follow the regenerated index and upstream README. Those inventory refreshes retain story IDs and `unreviewed` statuses. diff --git a/maps/storybook-map/catalog.json b/maps/storybook-map/catalog.json deleted file mode 100644 index b9143d2e363..00000000000 --- a/maps/storybook-map/catalog.json +++ /dev/null @@ -1,6699 +0,0 @@ -{ - "version": 1, - "sharedReview": { - "sources": [ - "ui/storybook/.storybook/main.ts", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "maps/feature-map/README.md", - "scripts/storybook-feature-index.mjs", - "ui/storybook/generated/feature-index.json", - "ui/storybook/support/feature-map/FeatureOverview.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "fingerprint": "67b8c3a8e708c2e3bcd8a4a77d72e1f6575b5084212c288cfd1abab2118fce50" - }, - "entries": [ - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/connection-setup.md", - "ui/src/pages/apps/AppLogo.tsx", - "ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx" - ], - "fingerprint": "6cccd3d57ac6d02f9fbeed4173a7813a4249d734b8f2d28f98c29706cbcc8548", - "stableId": "apps-canonical-icon-registry", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Canonical icon registry" - }, - { - "file": "ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx", - "capabilities": [ - "connection-setup/credentials", - "connection-setup/failure", - "connection-setup/draft-recovery", - "connection-setup/identity-and-access", - "app-permissions/action-policy", - "app-permissions/test-action" - ], - "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. SavedDraftResume, Reconnect, SelectedAgents and ManageToolPermissions demonstrate production setup/permissions/test surfaces with an in-memory wrapper. Reload loses the draft; these examples do not verify persisted recovery. NewToolsAllowed does not demonstrate quarantined-action review. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/ArcadeConnection.stories.tsx", - "maps/feature-map/app-permissions.md" - ], - "fingerprint": "935bbdd07ef2e35b65fc6e3b4201f846f9735177e3b4415c5bbe8d0e159e0f9c", - "stableId": "apps-connections-arcade", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade" - }, - { - "file": "ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx", - "capabilities": [ - "connection-setup/credentials", - "connection-setup/failure", - "connection-setup/draft-recovery", - "connection-setup/identity-and-access", - "app-permissions/action-policy", - "app-permissions/test-action" - ], - "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. SavedDraftResume, Reconnect, SelectedAgents and ManageToolPermissions demonstrate production setup/permissions/test surfaces with an in-memory wrapper. Reload loses the draft; these examples do not verify persisted recovery. NewToolsAllowed does not demonstrate quarantined-action review. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/ComposioConnection.stories.tsx", - "maps/feature-map/app-permissions.md" - ], - "fingerprint": "452224b19d14b6e3a7396cc1b55cb7663adaf6bf1c3202935da0f61d20be34c9", - "stableId": "apps-connections-composio", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Composio" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/ConnectionProviderChoice.stories.tsx" - ], - "fingerprint": "8661b29e8740f133ec6b457931fd7344e9225bc6f8acdd84573ac843ee9e7e97", - "stableId": "apps-connections-provider-choice", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Provider choice" - }, - { - "file": "ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx", - "capabilities": [ - "connection-setup/credentials", - "connection-setup/failure", - "connection-setup/draft-recovery", - "connection-setup/identity-and-access", - "app-permissions/action-policy", - "app-permissions/test-action" - ], - "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. SavedDraftResume, Reconnect, SelectedAgents and ManageToolPermissions demonstrate production setup/permissions/test surfaces with an in-memory wrapper. Reload loses the draft; these examples do not verify persisted recovery. NewToolsAllowed does not demonstrate quarantined-action review. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/ExecutorConnection.stories.tsx", - "maps/feature-map/app-permissions.md" - ], - "fingerprint": "e405d30ca0c64ceae9302500b07876c0dc57c8d0cbbedf23c432dfb9fe4a339d", - "stableId": "apps-connections-executor", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Executor" - }, - { - "file": "ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx", - "capabilities": [ - "connection-setup/credentials", - "connection-setup/failure", - "connection-setup/draft-recovery", - "connection-setup/identity-and-access", - "app-permissions/action-policy", - "app-permissions/test-action" - ], - "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. SavedDraftResume, Reconnect, SelectedAgents and ManageToolPermissions demonstrate production setup/permissions/test surfaces with an in-memory wrapper. Reload loses the draft; these examples do not verify persisted recovery. NewToolsAllowed does not demonstrate quarantined-action review. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/ZapierConnection.stories.tsx", - "maps/feature-map/app-permissions.md" - ], - "fingerprint": "a92fb11928da7e60fa8ef1db8b9090828c02dd60095dc581e620263522c721be", - "stableId": "apps-connections-zapier", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier" - }, - { - "file": "ui/storybook/stories/gateways-profiles/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/gateways-profiles/access-profiles.stories.tsx" - ], - "fingerprint": "23dfe9b1750b7eae8e6eae652f820ae2ff3e1415ce1b35e27717e24c3eed681b", - "stableId": "tools-access-profiles", - "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Tools/Access profiles" - }, - { - "file": "ui/storybook/stories/app-permissions/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/app-permissions/action-card.stories.tsx" - ], - "fingerprint": "37849ece1ec378382e41b84ee23d506ee9cbcee923e421b6fc9929fc4d420cc5", - "stableId": "tools-access-actioncard", - "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard" - }, - { - "file": "ui/storybook/stories/app-permissions/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/app-permissions/action-permissions-test.stories.tsx" - ], - "fingerprint": "7804d31cc4bf5fabd5191b201a85258f9d4c9a670331ac611628f8001114d687", - "stableId": "apps-action-permissions-test", - "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test" - }, - { - "file": "ui/storybook/stories/activity/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/activity-feed.stories.tsx" - ], - "fingerprint": "42f1ebbd11a7b47dd507f43c287c46a9191b8ce323b9c15d83a6d8ec5521eeee", - "stableId": "tools-activity-audit-feed", - "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)" - }, - { - "file": "ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx", - "capabilities": [ - "agent-chat/discovery", - "agent-chat/history" - ], - "purpose": "Design explorations/Agent chat sidebar/Pages", - "status": "unreviewed", - "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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements.", - "reviewedAt": "2026-10-13", - "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/agent-chat-sidebar.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "597dcadf01d44933b36074bbb7cee1f1b7a51e3282a5aa1f502fa5d65f7bb60c", - "stableId": "design-explorations-agent-chat-sidebar-pages", - "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages" - }, - { - "file": "ui/storybook/stories/questions-and-approvals/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior.", - "reviewedAt": "2026-10-13", - "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/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx" - ], - "fingerprint": "20c4a640715abcfeadc2763e5d7485aefd32d3e8d596e6392646f8e3264c3b78", - "stableId": "chat-comments-agent-chat-unanswered-questions", - "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions" - }, - { - "file": "ui/storybook/stories/agent-chat/agent-chat.stories.tsx", - "capabilities": [ - "agent-chat/discovery", - "agent-chat/history", - "agent-chat/handoff" - ], - "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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. ProjectCreated, ExistingProject, MultipleRepositories, ProjectWithoutRepository and ProjectCreationFailed show linked handoff results/navigation through shipped chat/task hosts. Tool execution and persistence are simulated. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements.", - "reviewedAt": "2026-10-13", - "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/agent-chat.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "b27f2b222b355a385524824a0cd6aa2d52997ee45301f71262055f1bce425af5", - "stableId": "design-explorations-agent-chat", - "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/agent-connection-reuse.stories.tsx" - ], - "fingerprint": "bbce05148164ab25761a964a86194d7933bd6280e70b6ed8d279bfd2a1dbcded", - "stableId": "onboarding-saved-connections", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections" - }, - { - "file": "ui/storybook/stories/agent-chat/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-chat/agent-conversation-sidebar.stories.tsx" - ], - "fingerprint": "2a57c402c2036a5c934b9d8da71699b3c4c93f023d12b9f80834b04fd16a4d7e", - "stableId": "design-explorations-agent-chat-sidebar-components", - "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/agents.md", - "ui/src/pages/AgentDetail.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/agents/agent-detail.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "84ae61a23e4b9019526f13cbf2356d1554e0ac7bc673988413affb3264e87a52", - "stableId": "pages-agent-detail", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/agents.md", - "ui/src/pages/AgentDetail.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/agents/agent-files.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "e3aed9caff032d05ca4eedaa41f8afbe28570e6403c660b37ce9799cca42c553", - "stableId": "agents-persistent-files", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Persistent files" - }, - { - "file": "ui/storybook/stories/agents/agent-management.stories.tsx", - "capabilities": [ - "agents/lifecycle", - "agents/instructions", - "execution-environments/assignment" - ], - "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. ForcedKubernetesExecution and ForcedKubernetesMissingEnvironment mount AgentConfigForm with a forced execution target or missing-target warning. Read-only assignment presentation; no saved target or remote execution proof. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review of the Environment override and Codex lifecycle/ACP selectors confirms reuse of the harness SelectPopover with the existing option and save semantics; render/play and live execution of these updated controls remain unverified.", - "reviewedAt": "2026-10-13", - "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/agents/agent-management.stories.tsx", - "maps/feature-map/execution-environments.md", - "ui/src/adapters/adapter-display-registry.ts", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx", - "ui/src/adapters/codex-local/config-fields.tsx" - ], - "fingerprint": "4c6bfad3978afe78514282e6dcc58fcadaf5cfb89adccc5661c964c523b700e3", - "stableId": "product-agent-management", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management" - }, - { - "file": "ui/storybook/stories/agents/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements.", - "reviewedAt": "2026-10-13", - "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/agents/agent-persona-pages.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "9b8b3116572467ccb0c44e851cb37f4a9b54a483f5a92f4382712dca170e0c9b", - "stableId": "agents-personas-full-pages", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/agent-personas.stories.tsx" - ], - "fingerprint": "162574c1cecafab716756b0e30c65c63336bb5d67921a769030f41d1e3673e69", - "stableId": "agents-personas", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Existing Legacy/native Codex editing, light/mobile and Advanced states retained unchanged. Source review of the Environment override and Codex lifecycle/ACP selectors confirms reuse of the harness SelectPopover with the existing option and save semantics; render/play and live execution of these updated controls remain unverified.", - "reviewedAt": "2026-10-13", - "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/agents/agent-settings-redesign.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx", - "ui/src/adapters/codex-local/config-fields.tsx" - ], - "fingerprint": "fe0647d007c3221a2700ad6dd8d62d9db989377c79e87be35e03cf6e53253a00", - "stableId": "agents-configuration-refresh", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/agent-setup-prompt.stories.tsx" - ], - "fingerprint": "379018ba98ba89a2a05b26f5db3e28d85d81af08b77a011c55d9bc6118fa1a15", - "stableId": "components-agent-setup-prompt", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Components/Agent setup prompt" - }, - { - "file": "ui/storybook/stories/skills/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/skills/agent-skill-row.stories.tsx" - ], - "fingerprint": "4eeb2029b5b1002afe393ab41da89a949c28d955130caa9feee4068b4b63fd2f", - "stableId": "agent-skills-agentskillrow", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Agent Skills/AgentSkillRow" - }, - { - "file": "ui/storybook/stories/skills/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/skills/agent-skills-edge.stories.tsx" - ], - "fingerprint": "e2beaa5b5d5fb0b9ee34935d05548d0448c250129b3c2377eb7973f284fdc452", - "stableId": "qa-agent-skills-edge-states", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/QA / Agent skills edge states" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/chat-channels/agentmail-onboarding.stories.tsx" - ], - "fingerprint": "69bd5253a034d76a1f13712cf59b8fba7c1678d95a8dd355988727cdccf77404", - "stableId": "connections-agentmail-setup", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/AgentMail setup" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation: EmailEndpointSettings remains the mounted inbox subsection. The surrounding ChatEndpointDetail connection-default editor and its save/inheritance behavior are not represented here.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/chat-channels.md", - "ui/src/pages/apps/chat/EmailEndpointSetup.tsx", - "ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx" - ], - "fingerprint": "2fb050825b457f876fa18d08cd101093d19187f47d7cd8b5a51c871d28d7553e", - "stableId": "connections-agentmail-settings", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/AgentMail settings" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts.", - "reviewedAt": "2026-10-13", - "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/chat-channels/agentmail.stories.tsx" - ], - "fingerprint": "5f4cd880d1c6baa0c88dc65bf5919cf451ea3c4bdd8b479ee2e3d2906ce1bd1c", - "stableId": "connections-agentmail-tasks", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/AgentMail tasks" - }, - { - "file": "ui/storybook/stories/skills/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/skills/agents-using-skill.stories.tsx" - ], - "fingerprint": "28d0e3a9ffe07d1c48b2e7e73cd67df55047c47cec1163779d1a9c46beb981ef", - "stableId": "skill-studio-agentsusingskill", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/AgentsUsingSkill" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/runs-adapters.md", - "ui/src/components/ai-connections/ManagedAiConnectionDetails.tsx", - "ui/storybook/prototypes/AiConnectionUsageReview.tsx", - "ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx" - ], - "fingerprint": "15b5f99cdafc51c9dc9ee8ffdb838f7aef659eb6d46594b98de354e3283b01ee", - "stableId": "ai-connections-usage-limits", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Usage limits" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/ai-connections.stories.tsx" - ], - "fingerprint": "964f5e903c699b242f202dd6fd06fc0d3c2113514403c9329b1bf0b10f2a36aa", - "stableId": "ai-connections-review", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Review" - }, - { - "file": "ui/storybook/stories/navigation-preferences/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/navigation-preferences/announcement-card.stories.tsx" - ], - "fingerprint": "39d0cbdb22d29fee065260ad54fb01da1df21897f3228275875250793ef23bf8", - "stableId": "announcements-announcementcard", - "sidebarTitle": "Oversight and operation/Navigation, profile, and announcements/Announcements/AnnouncementCard" - }, - { - "file": "ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx", - "capabilities": [ - "activity/activity", - "gateways-profiles/activity" - ], - "purpose": "Apps/App detail · 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/activity/app-activity-lifecycle.stories.tsx" - ], - "fingerprint": "6c813a16621d93fe9f817b1b01d451a35b4b552727976168e938409d100b26e9", - "stableId": "apps-app-detail-·-activity-lifecycle", - "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/apps-catalog-source-selection.stories.tsx" - ], - "fingerprint": "e93a8979af016cd9823399c8a3888b5e03de8718defa31fa00a1ccd521241bd6", - "stableId": "apps-catalog-source-selection", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Catalog source selection" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/connection-setup.md", - "ui/src/pages/apps/AppsConnect.tsx", - "ui/src/pages/tools/PasteConfigTab.tsx", - "ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx" - ], - "fingerprint": "c9c741dd4b9fdac34e49e6940c5be47c3c728dcb0ad4c057eb18d90d4e25f4aa", - "stableId": "apps-connect-discoverability-pap-11091", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connect discoverability (PAP-11091)" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/connection-setup.md", - "ui/src/pages/apps/AppsConnect.tsx", - "ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx" - ], - "fingerprint": "9de4f6ee6436b4edee2cbfa8f21ddd34b587da624a3f77b9b167a810fd0f60df", - "stableId": "apps-connect-name-at-create-time-pap-11283", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connect name at create time (PAP-11283)" - }, - { - "file": "ui/storybook/stories/app-permissions/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/app-permissions/apps-managed-accounts.stories.tsx" - ], - "fingerprint": "a1627ade7b4327780b978e7f58fc54d70f30337ef109c8ef2afc793450045b1b", - "stableId": "apps-managed-accounts", - "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Apps/Managed accounts" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-cards/commit.stories.tsx", - "ui/storybook/support/artifact-cards/storyConfig.tsx" - ], - "fingerprint": "7a6d3f80bcdbdc75b9d4b212ac5ad48fe33ec983cadabd2d9d8a75f4bd373ccb", - "stableId": "explorations-artifact-cards-commit", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Commit" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-cards/data.stories.tsx", - "ui/storybook/support/artifact-cards/storyConfig.tsx" - ], - "fingerprint": "d811c07d4b2febcca8880f2cbb370d5fd6812aab11981122e1ff0cd452026ea1", - "stableId": "explorations-artifact-cards-data", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Data" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-cards/document.stories.tsx", - "ui/storybook/support/artifact-cards/storyConfig.tsx" - ], - "fingerprint": "84f56eaeecd79297c6aaef270770229d3692325313dc4838ca1bf758c518abb0", - "stableId": "explorations-artifact-cards-document", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Document" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-cards/file.stories.tsx", - "ui/storybook/support/artifact-cards/storyConfig.tsx" - ], - "fingerprint": "d2ccd3e4eb8272bfc2e54292141e6367d169979933c27f9d099e437000c5522f", - "stableId": "explorations-artifact-cards-file", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/File" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-cards/image.stories.tsx", - "ui/storybook/support/artifact-cards/storyConfig.tsx" - ], - "fingerprint": "3f56a6aa81d4ccbbd5666840bc017a813482e9a40df61c0ac18aa6d42f7c860a", - "stableId": "explorations-artifact-cards-image", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Image" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-cards/link-preview.stories.tsx", - "ui/storybook/support/artifact-cards/storyConfig.tsx" - ], - "fingerprint": "30807b316e1ddc32e3288927283512507974ef537dee5d7ecb11936b6bcb7131", - "stableId": "explorations-artifact-cards-link-preview", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Link preview" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-cards/pull-request.stories.tsx", - "ui/storybook/support/artifact-cards/storyConfig.tsx" - ], - "fingerprint": "21959a663489bd8ab8389ef1492a2b459c7159efa87033253d2430827f288bfc", - "stableId": "explorations-artifact-cards-pull-request", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Pull request" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/support/artifact-cards/storyConfig.tsx", - "ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx" - ], - "fingerprint": "7187d0b7c3486eaa0e9b7abe375eb11db9c993701ee23edf3f1703a99c1acdd2", - "stableId": "explorations-artifact-cards-video", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Video" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-upload/01-components.stories.tsx", - "ui/storybook/support/artifact-upload/UploadPreview.tsx", - "ui/storybook/support/artifact-upload/fixtures.ts" - ], - "fingerprint": "97036aef581ed62b1032742741c139e710f0f2a9e634c75e507ce5dc38d938e5", - "stableId": "artifact-upload-01-artifacts-pane", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Artifact upload/01 Artifacts pane" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifact-upload/02-task-journey.stories.tsx", - "ui/storybook/support/artifact-upload/UploadPreview.tsx", - "ui/storybook/support/artifact-upload/fixtures.ts" - ], - "fingerprint": "ce98222afff00d7dfdfa7f84fd5e909bfe49fe8e5c1bd0f7f188942d11eafec7", - "stableId": "artifact-upload-02-paused-task-journey", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Artifact upload/02 Paused task journey" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/artifacts.stories.tsx" - ], - "fingerprint": "8752ed42735eb3e31b788c3d6661109a5a1230b667575cf5b4f78ba4f2f950af", - "stableId": "pages-artifacts", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "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/tasks/assigned-backlog-safeguards.stories.tsx" - ], - "fingerprint": "634be5456a6554553c9c19852941533fd657b48ea9aaf97ea2774a5b52fed8d0", - "stableId": "paperclip-assigned-backlog-safeguards", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards" - }, - { - "file": "ui/storybook/stories/inbox-search/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. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "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/inbox-search/blocked-inbox.stories.tsx" - ], - "fingerprint": "1ef985b27fe351ee34b584ca878c66819fd46986eb09dbce59c408c66b35a495", - "stableId": "product-inbox-blocked-tab", - "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab" - }, - { - "file": "ui/storybook/stories/workspaces/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "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/workspaces/browser-use-activity.stories.tsx" - ], - "fingerprint": "00c08cb6566e12b7fd9dce179296397813ea3e2ab4ee47d27cd1ca948496ca15", - "stableId": "tasks-browser-use-task-activity", - "sidebarTitle": "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity" - }, - { - "file": "ui/storybook/stories/workspaces/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "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/workspaces/browser-use-footer.stories.tsx" - ], - "fingerprint": "fda7ec26101f5b6fe68da1f7b6a96c364878c5f14884d639e406412e8341959f", - "stableId": "tasks-browser-use-footer", - "sidebarTitle": "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/browser-use-settings.stories.tsx" - ], - "fingerprint": "c4b0593a7d8fd826c8949fa2374c469fdc6a4ad8cbf6efd01fbd97f6db833228", - "stableId": "connections-browser-use-cloud-settings", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Connections/Browser Use Cloud/Settings" - }, - { - "file": "ui/storybook/stories/workspaces/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "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/workspaces/browser-use.stories.tsx" - ], - "fingerprint": "dafe2721334717ad745e72100e23577dbe3816a3b9ee9224a114ff84fbbb4729", - "stableId": "tasks-browser-use-panel", - "sidebarTitle": "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel" - }, - { - "file": "ui/storybook/stories/budgets-costs/budget-finance.stories.tsx", - "capabilities": [ - "budgets-costs/cost-reporting", - "budgets-costs/budgets", - "budgets-costs/incidents" - ], - "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. FullMatrix renders BudgetIncidentCard in warning, resolved, pending-approval and escalated hard-stop states. Resolution handlers are no-ops; budget relief and resumption remain unverified. The upstream budget UI distinguishes soft warnings from hard stops; hard incidents retain raise-and-resume and keep-paused controls.", - "reviewedAt": "2026-10-13", - "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/budgets-costs/budget-finance.stories.tsx" - ], - "fingerprint": "1af4d0af7d3dc0008dce21ac303af6aa90fb46593389fc7e47602a490e3ca8c7", - "stableId": "product-budget-finance", - "sidebarTitle": "Oversight and operation/Costs and budgets/Product/Budget & Finance" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/built-in-agents.stories.tsx", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx" - ], - "fingerprint": "48018bc81e95b74eeb89ebcbc2a744cb57682c78dba3e740ea5afaec8377bd23", - "stableId": "product-built-in-agents", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Product/Built-in Agents" - }, - { - "file": "ui/storybook/stories/tasks/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/tasks/chat-comments.stories.tsx" - ], - "fingerprint": "9736a5fcb89328b5d0c41c06d6d836d5e069efc983f9be891f7ad4df21316745", - "stableId": "product-chat-comments", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Chat & Comments" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/chat-channels.md", - "ui/src/pages/apps/Browse.tsx", - "ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx" - ], - "fingerprint": "bd604a05920f1015bac52ede82ba83726bf4d79126b7f8f8c8afcd5aa4aca630", - "stableId": "connections-chat-connection-actions", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Chat connection actions" - }, - { - "file": "ui/storybook/stories/agent-chat/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements.", - "reviewedAt": "2026-10-13", - "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/chat-entry.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "92a29205dfb9afa59f73098136c1becff2c95558596ed659a025fa88cbf0c57f", - "replacement": "ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx", - "stableId": "design-explorations-chat-entry", - "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry" - }, - { - "file": "ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx", - "capabilities": [ - "chat-channels/lifecycle", - "chat-channels/identity", - "chat-channels/conversation" - ], - "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. Task-workspace reconciliation: the mounted endpoint adds connection and destination editors. Local endpoint PATCH/resource PUT preserve defaults; workspace-choice requests now return only active/idle, unclosed fixture workspaces. Browser save/error/reload and new-conversation inheritance remain unverified. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Inspected channel task-default controls, optional API fields, avatar rendering and matching fixture updates; live defaults inheritance and permission checks remain outside these stories. Access, InvitePeople, ConnectAndTest and Conversations render the shipped endpoint detail with simulated identity linking and conversation data. External delivery and identity authorization are not live.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/chat-channels.md", - "ui/src/api/chatEndpoints.ts", - "ui/src/api/execution-workspaces.ts", - "ui/src/api/projects.ts", - "ui/src/components/Layout.tsx", - "ui/src/pages/apps/chat/ChatEndpointDetail.tsx", - "ui/src/pages/apps/chat/ChatExecutionDefaults.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx" - ], - "fingerprint": "1b095845d727d6703d3cfb3b27120927c8ac8b8fd4f2950770c7c5f4aed44d3b", - "stableId": "connections-chat-management", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Chat management" - }, - { - "file": "ui/storybook/stories/recovery/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. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/CloudAccessGate.tsx", - "ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx" - ], - "fingerprint": "65051e49291a3917a3b62604fa76747d2df1825f2601f9abbf2e4ab45b5add9d", - "stableId": "app-connection-recovery", - "sidebarTitle": "Projects and execution/Recovery/App/Connection recovery" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/tasks/completed-activity.stories.tsx" - ], - "fingerprint": "888e749d4aef07ab30de3f35065572b010bd69a40fc4db88e99d400138b7e12b", - "stableId": "tasks-completed-activity-preview", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Tasks/Completed activity preview" - }, - { - "file": "ui/storybook/stories/tasks/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/tasks/composer-add-menu.stories.tsx" - ], - "fingerprint": "a3d8d5ddf558df4e5118c747bb1c42ef1d43b23202200614a96c7a4c5ab47e91", - "stableId": "composer-add-menu", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Composer/Add menu" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/tasks/composer-mobile-assignee.stories.tsx" - ], - "fingerprint": "34a636e15ee140a1ad4aff98f4704bb4a453756a7ed4d9ebed2a7130d278d1e6", - "stableId": "composer-mobile-assignee-picker", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/tasks/composer-model-picker.stories.tsx" - ], - "fingerprint": "e479f7f11feac2ce5f78ba24cb276407e62d0679b9aee7dd4c71f1b4b1d6340d", - "stableId": "composer-model-and-effort-picker", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker" - }, - { - "file": "ui/storybook/stories/questions-and-approvals/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior.", - "reviewedAt": "2026-10-13", - "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/questions-and-approvals/composer-question-flow.stories.tsx" - ], - "fingerprint": "c1b27485d6807fe060e4420340b6dee67a2630642f4a7b5bbcee330f4c12efa3", - "stableId": "composer-question-flow", - "sidebarTitle": "Tasks and conversations/Questions and approvals/Composer/Question flow" - }, - { - "file": "ui/storybook/stories/steering/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior.", - "reviewedAt": "2026-10-13", - "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/steering/composer-queued-messages.stories.tsx" - ], - "fingerprint": "a7a8c31427592e9e35a4da6c90e08c334835e9f84544f2e887aa102c3fc35071", - "stableId": "composer-steering-and-queued-messages", - "sidebarTitle": "Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages" - }, - { - "file": "ui/storybook/stories/connection-setup/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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-setup/connection-instructions.stories.tsx" - ], - "fingerprint": "6f79a3717d5500eea2d3ed89e5a1065f31996ec50fc3a72fb23aa60a6aedddc9", - "stableId": "design-explorations-connections-agent-instructions", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/connection-pool-connector.stories.tsx" - ], - "fingerprint": "048b24b11a23f8d6beab12d23766c6ca2c25defcfc976edf6d16c715945b3e85", - "stableId": "connectors-pool-host", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/connection-pools.stories.tsx" - ], - "fingerprint": "cdc847e486e7ad16aa349f405535c789e52c372aef25232ee71fb47e6c247cbe", - "stableId": "ai-connections-connection-pools", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Connection pools" - }, - { - "file": "ui/storybook/stories/questions-and-approvals/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/questions-and-approvals/connection-reviews.stories.tsx" - ], - "fingerprint": "20866331e244be5a10686f155ff0e0e1d9e644abdea71ca9b63ed46fd925732c", - "stableId": "chat-comments-connection-reviews", - "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/tasks/control-plane-surfaces.stories.tsx" - ], - "fingerprint": "ad5842a0179d5b824f4b08170e82ce66fe3929eb93021af3606e7c9dd81ddc12", - "stableId": "product-control-plane-surfaces", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces" - }, - { - "file": "ui/storybook/stories/budgets-costs/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. The upstream budget UI distinguishes soft warnings from hard stops; hard incidents retain raise-and-resume and keep-paused controls.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/budgets-costs.md", - "ui/src/components/ToastViewport.tsx", - "ui/src/pages/Costs.tsx", - "ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx" - ], - "fingerprint": "7eeef3d9becbe18d7f7e644f4fc8628c386071f151a038842fac12e97602c81d", - "stableId": "costs-subscriptions", - "sidebarTitle": "Oversight and operation/Costs and budgets/Costs/Subscriptions" - }, - { - "file": "ui/storybook/stories/secrets/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. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "maps/feature-map/secrets.md", - "ui/src/components/task-chat/TaskChatMarker.tsx", - "ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx" - ], - "fingerprint": "e47db04211055da618b8759ca77f1c725fd6370a660619fa621e7df53c6e140a", - "stableId": "task-credential-access-01-notice", - "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice" - }, - { - "file": "ui/storybook/stories/secrets/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery. The merged task page passes task status and runtime/recovery authority to the retained-file form; its stopped-execution and file evidence remain separate live requirements.", - "reviewedAt": "2026-10-13", - "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/secrets/credential-access/02-task-page.stories.tsx", - "ui/storybook/support/credential-access/CredentialTaskPage.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "0707a64258e35c1c1cd941304482c17a89d00f4ed02c7b11ec16c060ebdb2c6c", - "stableId": "task-credential-access-02-task-page", - "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/csv-preview.stories.tsx" - ], - "fingerprint": "734738f2d9a747215f4a34baa7d448238fbfc2da7218c79b1eff8643aed6cefc", - "stableId": "components-csv-file-tab", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Components/CSV File Tab" - }, - { - "file": "ui/storybook/stories/activity/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task.", - "reviewedAt": "2026-10-13", - "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/activity/data-viz-misc.stories.tsx", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx" - ], - "fingerprint": "9e31b126875ae54e0a8249dbc743170a2cc1f7076d5ccb33ab0595122d69db61", - "stableId": "product-data-visualization-misc", - "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Product/Data Visualization & Misc" - }, - { - "file": "ui/storybook/stories/inbox-search/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. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/inbox-search.md", - "ui/src/components/DecisionCard.tsx", - "ui/storybook/stories/inbox-search/decision-card.stories.tsx" - ], - "fingerprint": "172482180fa305e06238da1fa90a277dd1eb109354d8bfeb0b2b833b9aba798d", - "stableId": "decisions-decisioncard", - "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Decisions/DecisionCard" - }, - { - "file": "ui/storybook/stories/companies/decision-models/01-settings.stories.tsx", - "capabilities": [ - "companies/identity", - "budgets-costs/cost-reporting", - "companies/decision-models" - ], - "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. Related decision-service examples show connection/model configuration, bounded test receipts or invocation history using shipped subjects and simulated data. No paid provider or authorization proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/budgets-costs.md", - "maps/feature-map/companies.md", - "ui/src/components/decision-models/DecisionModelSettings.tsx", - "ui/storybook/stories/companies/decision-models/01-settings.stories.tsx", - "ui/storybook/support/decision-models/fixtures.ts" - ], - "fingerprint": "deb224b7109eeb7c2672ac22e63c5ea62053198eac5ba69d796c13b418bff263", - "stableId": "decision-models-01-settings", - "sidebarTitle": "Getting started and access/Companies and portability/Decision models/01 Settings" - }, - { - "file": "ui/storybook/stories/companies/decision-models/02-history.stories.tsx", - "capabilities": [ - "companies/identity", - "budgets-costs/cost-reporting", - "companies/decision-models" - ], - "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. Related decision-service examples show connection/model configuration, bounded test receipts or invocation history using shipped subjects and simulated data. No paid provider or authorization proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/budgets-costs.md", - "maps/feature-map/companies.md", - "ui/src/components/decision-models/DecisionHistory.tsx", - "ui/storybook/stories/companies/decision-models/02-history.stories.tsx", - "ui/storybook/support/decision-models/fixtures.ts" - ], - "fingerprint": "a32eb6bdb93e8fd8ecb05ed6bc8a7483c6c39e77b862700ff1ae192293d139ee", - "stableId": "decision-models-02-history", - "sidebarTitle": "Getting started and access/Companies and portability/Decision models/02 History" - }, - { - "file": "ui/storybook/stories/companies/decision-models/03-journey.stories.tsx", - "capabilities": [ - "companies/identity", - "budgets-costs/cost-reporting", - "companies/decision-models" - ], - "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. Related decision-service examples show connection/model configuration, bounded test receipts or invocation history using shipped subjects and simulated data. No paid provider or authorization proof. The upstream budget UI distinguishes soft warnings from hard stops; hard incidents retain raise-and-resume and keep-paused controls.", - "reviewedAt": "2026-10-13", - "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/companies/decision-models/03-journey.stories.tsx", - "ui/storybook/support/decision-models/fixtures.ts" - ], - "fingerprint": "18b3ec30595cccd821d30fbf6eef0ca7b072666c9fd98b48f866b4420144a244", - "stableId": "decision-models-03-journey", - "sidebarTitle": "Getting started and access/Companies and portability/Decision models/03 Journey" - }, - { - "file": "ui/storybook/stories/inbox-search/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. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/inbox-search/decisions-desk.stories.tsx" - ], - "fingerprint": "4b39ccddf9d5ed2847fe0bd9f0078b183ffcaeb41b67121410909ef10a73e938", - "stableId": "pages-decisions-desk", - "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Pages/Decisions Desk" - }, - { - "file": "ui/storybook/stories/instance-operations/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. The recipe distinguishes process liveness from authenticated database readiness; these examples do not exercise that operator API boundary.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/instance-operations.md", - "ui/src/components/DevRestartBanner.tsx", - "ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx" - ], - "fingerprint": "bdf84e773044debd9c5d970c52a01c146e0065b3772be9e13e90315a23ff14b5", - "stableId": "product-dev-ops-surfaces", - "sidebarTitle": "Oversight and operation/Instance operations/Product/Dev Ops Surfaces" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/tasks/dialogs-modals.stories.tsx" - ], - "fingerprint": "518ecd1a4ebe8377cfcca135ea0d1e1c92d50982d3cb7825a2426d5811447a34", - "stableId": "product-dialogs-modals", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/document-annotations.stories.tsx" - ], - "fingerprint": "37f01db23f298992b973fed56fd439ae0a0586bfc703af55dcf9fa69f14b86de", - "stableId": "product-documents-annotations", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Product/Documents/Annotations" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/document-comments.stories.tsx" - ], - "fingerprint": "1ff3445ed22893256cecf44c00c5f4714ae573e4d26351388fb672efe8726df4", - "stableId": "product-document-comments", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Product/Document Comments" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/gateways-profiles.md", - "maps/feature-map/runs-adapters.md", - "ui/src/components/DotRunnerConnection.tsx", - "ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx" - ], - "fingerprint": "5a4634b48c66f7bcccbc5cad2f96411e4dc2295dd6b5d6ffc08af78514109432", - "stableId": "assistant-connections-dot-runner", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/enterpret-connect-flow.stories.tsx" - ], - "fingerprint": "81be6c7c5dd054799a393b8c61c29c4190cf8a112fd9e573e0010c2cbab393c9", - "stableId": "apps-enterpret-connector", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Enterpret connector" - }, - { - "file": "ui/storybook/stories/secrets/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. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/secrets.md", - "ui/src/components/environment-variables-editor/index.tsx", - "ui/storybook/stories/secrets/environment-variables-editor.stories.tsx" - ], - "fingerprint": "e358e40a80d2d2dc92050836098375e0f9d88a3b59491d24c1a4c4b784e70c00", - "stableId": "product-environment-variables-editor", - "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Product/Environment Variables Editor" - }, - { - "file": "ui/storybook/stories/recovery/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. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/ExecutionBlockerNotice.tsx", - "ui/src/components/WorkspaceFileRecovery.tsx", - "ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx", - "ui/storybook/support/workspace-file-recovery/fixture.tsx" - ], - "fingerprint": "cb2da1b3f76b1b644f7b11fb6f55c27950ae51ce3e590ead878d3703606588d7", - "stableId": "task-chat-recovery-notice", - "sidebarTitle": "Projects and execution/Recovery/Task chat/Recovery notice" - }, - { - "file": "ui/storybook/stories/recovery/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. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "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/recovery/execution-recovery.stories.tsx" - ], - "fingerprint": "4cfa6fd775c9cf04e0586ed5a7218df3e8bb51dcaadf80b9a26a979aabf61e98", - "stableId": "tasks-execution-recovery", - "sidebarTitle": "Projects and execution/Recovery/Tasks/Execution recovery" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/access.md", - "maps/feature-map/agents.md", - "ui/src/components/new-agent/ExternalAgentInviteContent.tsx", - "ui/storybook/stories/agents/external-agent-invite/components.stories.tsx" - ], - "fingerprint": "a72cbd8896916cc6f22bef09ef3199e0bff24391b95121061e5c5ca778eb12e3", - "stableId": "onboarding-external-agent-invitation-components", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/support/external-agent-invite/ExternalAgentInvitePreview.tsx", - "ui/storybook/support/external-agent-invite/fixtures.ts", - "ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "97d41b0e321f50c23a9dd83724efe4fc969126de4794bd4416b47033935aea6a", - "stableId": "onboarding-external-agent-invitation-journeys", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/tasks/external-objects.stories.tsx" - ], - "fingerprint": "1a7a6fc735b582b7f0968b97d0159528834a499f6d090c0ec678a1092dc6e3ac", - "stableId": "foundations-external-objects", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/External Objects" - }, - { - "file": "ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx", - "capabilities": [ - "companies/identity", - "budgets-costs/cost-reporting", - "companies/fast-responses" - ], - "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. Related fast-response examples show configuration/test receipts or invocation history with shipped subjects and simulated data. A receipt is an acknowledgement, not task completion; no paid provider or authorization proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/budgets-costs.md", - "maps/feature-map/companies.md", - "ui/src/components/fast-responses/FastResponseSettings.tsx", - "ui/storybook/support/decision-models/fixtures.ts", - "ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx" - ], - "fingerprint": "569c9d9b91872d61d0b4fe44b114d7f9c81bb8c5a5ca5b3545235cd935d8129e", - "stableId": "fast-responses-01-settings", - "sidebarTitle": "Getting started and access/Companies and portability/Fast responses/01 Settings" - }, - { - "file": "ui/storybook/stories/companies/fast-responses/02-history.stories.tsx", - "capabilities": [ - "companies/identity", - "budgets-costs/cost-reporting", - "companies/fast-responses" - ], - "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. Related fast-response examples show configuration/test receipts or invocation history with shipped subjects and simulated data. A receipt is an acknowledgement, not task completion; no paid provider or authorization proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/budgets-costs.md", - "maps/feature-map/companies.md", - "ui/src/components/decision-models/DecisionHistory.tsx", - "ui/storybook/support/decision-models/fixtures.ts", - "ui/storybook/stories/companies/fast-responses/02-history.stories.tsx" - ], - "fingerprint": "0be6f0579e9daf13ba3bc6500c4a5980efc09407a408498385219391a5fdd3c1", - "stableId": "fast-responses-02-history", - "sidebarTitle": "Getting started and access/Companies and portability/Fast responses/02 History" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/file-viewer.stories.tsx" - ], - "fingerprint": "8626806337c9c664e11cee4587b80e068dfd3e6259e8c8fc2d3d1648b68abf84", - "stableId": "components-file-viewer-sheet", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Components/File Viewer Sheet" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/fireflies-pr.stories.tsx" - ], - "fingerprint": "0a85fc855275fb6dfbd89dbc9d25bed994b940af1a01d95b04d4375d843fd1dc", - "stableId": "pr-reviews-fireflies-and-app-webhooks", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks" - }, - { - "file": "ui/storybook/stories/skills/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/skills/fork-skill-flow.stories.tsx" - ], - "fingerprint": "7cd95e52a451f78371dc2c5793679c14b28f1fb486dcb2ed5f8b1f4e041267a8", - "stableId": "skill-studio-editacopy", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/EditACopy" - }, - { - "file": "ui/storybook/stories/foundations/forms-editors.stories.tsx", - "capabilities": [ - "developer-labs/design" - ], - "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. Related design reference: demonstrates shared production controls and visual states in an isolated contributor fixture; retains its Foundations home. No product-journey or baseline comparison claim.", - "reviewedAt": "2026-10-13", - "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/foundations/forms-editors.stories.tsx", - "maps/feature-map/developer-labs.md" - ], - "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "28920ad31b69171ba62c0fd1f5b7f1581d527ede597acd6b445c5f8e773c2f64", - "stableId": "components-forms-editors", - "sidebarTitle": "Foundations/Components/Forms & Editors", - "home": "foundations" - }, - { - "file": "ui/storybook/stories/foundations/foundations.stories.tsx", - "capabilities": [ - "developer-labs/design" - ], - "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. Related design reference: demonstrates shared production controls and visual states in an isolated contributor fixture; retains its Foundations home. No product-journey or baseline comparison claim. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/foundations.stories.tsx", - "maps/feature-map/developer-labs.md" - ], - "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "0f4ace317b34e5b1d19abfd2198b9a70ba0b53b46019eafb3c39dce7823a63e6", - "stableId": "foundations-primitive-matrix", - "sidebarTitle": "Foundations/Primitive Matrix", - "home": "foundations" - }, - { - "file": "ui/storybook/stories/skills/frontmatter-panel.stories.tsx", - "capabilities": [ - "skills/authoring" - ], - "purpose": "Product/Skill Studio · 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/skills/frontmatter-panel.stories.tsx" - ], - "fingerprint": "e7b2ffabdadc43d7fa2f564465792539d25f15da54fb4f7fec31cc4a2f0aec76", - "stableId": "product-skill-studio-·-frontmatterpanel", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Product/Skill Studio · FrontmatterPanel" - }, - { - "file": "ui/storybook/stories/gateways-profiles/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-profiles/gateways-tab.stories.tsx" - ], - "fingerprint": "c4e0e6770f0ed5d6cad1805717b38b9ab6a96e1c885a2013af979556dd45e8ae", - "stableId": "tools-gateways-pap-11182", - "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Tools/Gateways (PAP-11182)" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation: mounted repository and endpoint editors use simulated defaults. Endpoint PATCH now persists omitted/null/concrete values across GET and resets on remount; repository PUT already preserves them. Choice caches intentionally contain no projects/workspaces. Browser editor interactions, access denials and new-task inheritance remain unverified. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Inspected channel task-default controls, optional API fields, avatar rendering and matching fixture updates; live defaults inheritance and permission checks remain outside these stories. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/chat-channels.md", - "ui/src/api/chatEndpoints.ts", - "ui/src/api/execution-workspaces.ts", - "ui/src/api/projects.ts", - "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/ChatExecutionDefaults.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/chat-channels/github-bot-management/management.stories.tsx", - "ui/storybook/support/github-bot-management/fixture-api.tsx", - "ui/storybook/support/github-bot-management/fixtures.ts", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx" - ], - "fingerprint": "5ded897d9a7da2c801294111417080b771b4d8e225ce311fbd7c0511934d8aad", - "stableId": "connectors-github-bot-management", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance.", - "reviewedAt": "2026-10-13", - "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/chat-channels/github-chat.stories.tsx" - ], - "replacement": "ui/storybook/stories/chat-channels/github-connections.stories.tsx", - "fingerprint": "efb2ea9851242dfd79874e3a3c9bc46b17b7728e2b10f6b2127a2437638f0499", - "stableId": "historical-github-chat-prototypes", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/chat-channels/github-connections.stories.tsx" - ], - "fingerprint": "e59cc39bf1cf6db5359c94a30c7b64e3b8cb175b576295f16d541850929abce9", - "stableId": "connections-github-and-code-review-bot", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot" - }, - { - "file": "ui/storybook/stories/skills/github-skills-journey.stories.tsx", - "capabilities": [ - "skills/versions", - "skills/discovery", - "skills/policy" - ], - "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. AssignToAgent and AssignedSkill demonstrate library/detail assignment with local policy fixtures. No runtime enforcement or backend persistence proof.", - "reviewedAt": "2026-10-13", - "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/skills/github-skills-journey.stories.tsx" - ], - "fingerprint": "04b12de08d13813c1332d46f9bed8164f329aaf73ea0c57cbf83ecb6d3a4c6b1", - "stableId": "skills-github-sync-journey", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey" - }, - { - "file": "ui/storybook/stories/skills/github-synced-skills.stories.tsx", - "capabilities": [ - "skills/versions", - "skills/discovery" - ], - "purpose": "Skills/GitHub synced skills", - "status": "unreviewed", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production Sources page with fixture APIs. Disconnect and legacy removal stories show a required keep-or-delete choice; the real copy, delete, and reimport flows were also tested locally. Other routes remain unreviewed.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/skills.md", - "ui/src/pages/SkillSources.tsx", - "ui/storybook/fixtures/githubSkillSources.ts", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/skills/github-synced-skills.stories.tsx" - ], - "fingerprint": "c14509e4b57e7587f560824f417c8439dbb6bc3d303d37dec169ab819c867d36", - "stableId": "skills-github-synced-skills", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/documents-artifacts.md", - "maps/feature-map/workspaces.md", - "ui/src/components/task-side-panel/TaskAttachmentPanel.tsx", - "ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx", - "ui/storybook/support/html-artifacts/fixtures.ts" - ], - "fingerprint": "404690079b8b85bf7aaab867266a14096f7d57bea2665032efba2f82617008df", - "stableId": "html-artifacts-01-preview", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "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/documents-artifacts/html-artifacts/02-workspace.stories.tsx", - "ui/storybook/support/html-artifacts/fixtures.ts" - ], - "fingerprint": "4ced4be164f64cb1dd0158cf3afc9939e63e4447a3911b33e664544277693f0b", - "stableId": "html-artifacts-02-workspace", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "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/documents-artifacts/html-artifacts/03-task-journey.stories.tsx", - "ui/storybook/support/html-artifacts/fixtures.ts" - ], - "fingerprint": "c5cb892dd95ec005e52e6c61de414aedb5fe2a443a729038767028edd3c52b6d", - "stableId": "html-artifacts-03-task-journey", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey" - }, - { - "file": "ui/storybook/stories/chat-channels/imessage-photon.stories.tsx", - "capabilities": [ - "chat-channels/conversation", - "chat-channels/providers", - "chat-channels/identity", - "chat-channels/lifecycle", - "connection-setup/channel-setup", - "connection-setup/failure" - ], - "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. Task-workspace reconciliation reviewed the endpoint editor addition; this suite selects setup/access and locally simulated conversation states. Endpoint PATCH retains fields, but settings workspace-choice requests and default selection are not covered by these scenarios. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Inspected channel task-default controls, optional API fields, avatar rendering and matching fixture updates; live defaults inheritance and permission checks remain outside these stories. Catalog, ChooseAgent, Credentials, Access, Reconnect and ProviderOutageRecovery render shipped setup/detail states with simulated provider data. No live iMessage connection, delivery or recovery claim. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/chat-channels.md", - "ui/src/api/chatEndpoints.ts", - "ui/src/api/execution-workspaces.ts", - "ui/src/api/projects.ts", - "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/src/pages/apps/chat/ChatExecutionDefaults.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/chat-channels/imessage-photon.stories.tsx", - "maps/feature-map/connection-setup.md" - ], - "fingerprint": "0bde3836db1263b123716adacf6873f4acda21680527cc5d172a262d5706db33", - "stableId": "connections-imessage-photon", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/iMessage Photon" - }, - { - "file": "ui/storybook/stories/connection-setup/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/in-feed-connections.stories.tsx" - ], - "fingerprint": "0f7d921de69bc5e5164123985848a1a58bc2c860ebe085e70c300d36cc02a018", - "stableId": "connections-in-task-connections", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Connections/In-task connections" - }, - { - "file": "ui/storybook/stories/steering/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/steering/interrupt-handoff.stories.tsx" - ], - "fingerprint": "dbfb5b79928aefbc232eb6abbb17325aa6e5e0002c32bda062b529d2f486faab", - "stableId": "surfaces-interrupt-handoff", - "sidebarTitle": "Tasks and conversations/Steering and queued messages/Surfaces/Interrupt Handoff" - }, - { - "file": "ui/storybook/stories/recovery/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. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "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/recovery/issue-blocked-notice.stories.tsx" - ], - "fingerprint": "90f1eae150c50bd1a428ce322a8d65ceec8b24b6addc8b3b4ea5e90231bc1a2c", - "stableId": "product-issue-blocked-notice", - "sidebarTitle": "Projects and execution/Recovery/Product/Issue/Blocked notice" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. Focused creation-visibility stories mount the production collection with simulated hierarchy reads and assert hidden roots, opt-in inclusion, and the unchecked filter control. Creation visibility examples and fixture setup now live in a support module so the surface matrix stays below 1000 lines; exported story IDs are unchanged. Creation visibility now shares the subscribed preference across modern and legacy controls; hierarchy child reads share a bounded rendering budget. Source alignment inspected; server behavior is tested separately. Hierarchy fetch and rendering budgets are separate; loaded context remains during paging. The large-tree UI regression exercises delayed reads in both list interfaces. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/tasks/issue-management.stories.tsx", - "ui/storybook/support/issue-creation-visibility.tsx" - ], - "fingerprint": "554a97d096cb27b9418fa2dc5a3bc0cb853e8bafa128ef9abd7cf1c3df3a6bd5", - "stableId": "product-issue-management", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Issue Management" - }, - { - "file": "ui/storybook/stories/questions-and-approvals/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/questions-and-approvals/issue-plan-decompositions.stories.tsx" - ], - "fingerprint": "b2a44ee40bf7e673563ad6e164e3476306782a9ea74e132fa5330eb78acb82e0", - "stableId": "issue-detail-plan-decompositions", - "sidebarTitle": "Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions" - }, - { - "file": "ui/storybook/stories/task-coordination/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/task-coordination/issue-review-panel.stories.tsx" - ], - "fingerprint": "3c5317b38030ea75a8d57284af6d3ca2f0258dce52c694adc7b36fd41f6f875f", - "stableId": "product-decisions-stalled-review-actions", - "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/Product/Decisions/Stalled review actions" - }, - { - "file": "ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx", - "capabilities": [ - "questions-and-approvals/questions", - "questions-and-approvals/confirmations", - "questions-and-approvals/audience", - "questions-and-approvals/plan-review", - "questions-and-approvals/continuation" - ], - "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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Plan approval Pending, Confirmed, ExpiredByTargetChange and ResumeFailed states use shipped interaction cards. The continuation association covers accepted-but-resume-failed presentation only; no successful resumption, retry or duplicate-suppression proof.", - "reviewedAt": "2026-10-13", - "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/questions-and-approvals/issue-thread-interactions.stories.tsx" - ], - "fingerprint": "c36c3843d115a3dda4aded27d0ed2098105b18568b66e054f77088beca9a6e3c", - "stableId": "chat-comments-issue-thread-interactions", - "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/runs-adapters.md", - "ui/src/components/AdapterLoginChrome.tsx", - "ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx" - ], - "fingerprint": "c39048edc842ea22269d40bcd8f1bd02c9a5b4904e2d6fe14a426bce952689db", - "stableId": "ai-connections-provider-routing-07-subscription-sign-in", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/07 Subscription sign-in" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/connection-setup.md", - "ui/src/pages/apps/PaperclipCloudOAuthHandoff.tsx", - "ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx" - ], - "fingerprint": "3dfb21c9edeec6693db673e59fd0963597858d010c4eb1de35dc47535780d0c1", - "stableId": "apps-managed-cloud-oauth-handoff", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Managed Cloud OAuth handoff" - }, - { - "file": "ui/storybook/stories/connection-setup/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/memory-connectors.stories.tsx" - ], - "fingerprint": "cad7091dc313a79f4e8326669c805498526bf1edbf5d2403848ebf501fb9f55c", - "stableId": "apps-connections-memory", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Memory" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/tasks.md", - "ui/src/components/InlineEntitySelector.tsx", - "ui/src/components/SearchableSelect.tsx", - "ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx" - ], - "fingerprint": "249524a570189f2b01ef83136346a0d1ee099e233e357aa92ffaecd52a376b32", - "stableId": "components-entity-pickers-mobile", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Components/Entity pickers/Mobile" - }, - { - "file": "ui/storybook/stories/navigation-preferences/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/navigation-preferences/mobile-task-tabs.stories.tsx" - ], - "fingerprint": "f4ca5d157e5d943470084559cd557a95f80e3d20348e972bb3fa8df93d339bf6", - "stableId": "prototypes-task-detail-mobile-tabs", - "sidebarTitle": "Oversight and operation/Navigation, profile, and announcements/Prototypes/Task detail/Mobile tabs" - }, - { - "file": "ui/storybook/stories/recovery/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. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/IssueScheduledRetryCard.tsx", - "ui/storybook/stories/recovery/model-capacity-retry.stories.tsx" - ], - "fingerprint": "cc935eea1a2ffc27882364655db860c441c4dc059be3d4886a4bd7d3839752bf", - "stableId": "tasks-model-capacity-retry", - "sidebarTitle": "Projects and execution/Recovery/Tasks/Model capacity retry" - }, - { - "file": "ui/storybook/stories/task-coordination/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/task-coordination/monitor-surfaces.stories.tsx" - ], - "fingerprint": "2a9a823ce7e27a2e49d80bafc21394af1d34a396d53299b89e0d0c7fe4ae60f6", - "stableId": "product-issue-monitor-surfaces", - "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/Product/Issue Monitor surfaces" - }, - { - "file": "ui/storybook/stories/navigation-preferences/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-preferences/navigation-layout.stories.tsx" - ], - "fingerprint": "80b5d40676ba4a9e37936b8481dd282e1e468c6e7b256cc8687a0a712e4d3dfe", - "stableId": "product-navigation-layout", - "sidebarTitle": "Oversight and operation/Navigation, profile, and announcements/Product/Navigation & Layout" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/new-agent-onboarding.stories.tsx", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx" - ], - "replacement": "ui/storybook/stories/agents/agent-persona-pages.stories.tsx", - "fingerprint": "369a9343261cad73ee699c82c42e9cd5c5f2b8f6654e25cce04e1af626943499", - "stableId": "onboarding-new-agent", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/New agent" - }, - { - "file": "ui/storybook/stories/projects/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/projects/new-project-repos.stories.tsx" - ], - "fingerprint": "bf8bd88964cbf20a95449a10485d2aaf074cfe3f88456144332b193c2920be4b", - "stableId": "proposals-project-repos-new-project", - "sidebarTitle": "Projects and execution/Projects and repositories/Proposals/Project repos/New project" - }, - { - "file": "ui/storybook/stories/tasks/new-task-composer.stories.tsx", - "capabilities": [ - "tasks/create", - "workspaces/binding" - ], - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. WorktreePicker, ReuseWorktree, CreateWithReusedWorktree and NewWorktreeAfterReuse exercise workspace selection and submitted fixture request values. Actual admission/binding and execution remain outside this story. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/tasks.md", - "ui/src/components/MarkdownBody.tsx", - "ui/src/components/NewIssueDialog.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/tasks/new-task-composer.stories.tsx", - "maps/feature-map/workspaces.md" - ], - "fingerprint": "efb21d7fdb67867b886668295e55ac1e05f67c71029fb85b7f341c9662217705", - "stableId": "composer-new-task", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Composer/New task" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/connection-setup/notion-connect-flow.stories.tsx" - ], - "fingerprint": "7dc85c9cf9f5a37268aa1bca783d1c68d5cef474838ee79b4f1d2b293a7765d2", - "stableId": "apps-notion-mcp-connect-flow-pap-16650", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)" - }, - { - "file": "ui/storybook/stories/onboarding/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. Four managed Codex cases use scoped immutable-image discovery and a stateful saved-probe fixture: native default, measured Legacy, permission refusal, and unconfirmed cleanup. Native isolation recipe added; these fixture setup responses do not establish server-resolved transport isolation, real sandbox cleanup, or local/SSH enforcement. The operator QA timeout/concurrency recipe was inspected; this preview does not verify the first-task fixture’s pre-admission runtime bounds. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task.", - "reviewedAt": "2026-10-13", - "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/onboarding-agent-arc.stories.tsx", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx", - "ui/storybook/fixtures/paperclipData.ts" - ], - "fingerprint": "de0ffbd830a1142d1fd410b6c2ea27b4c3c117b00b867a3ccd1d2e804dfcd7db", - "stableId": "onboarding-agent-arc", - "sidebarTitle": "Getting started and access/Onboarding and first work/Onboarding/Agent arc" - }, - { - "file": "ui/storybook/stories/onboarding/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The added native isolation recipe is outside this character preview’s demonstrated scope. The operator QA timeout/concurrency recipe was inspected; this preview does not verify the first-task fixture’s pre-admission runtime bounds. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/onboarding.md", - "ui/src/components/onboarding/OnboardingCharacter.tsx", - "ui/src/components/ui/button.tsx", - "ui/storybook/stories/onboarding/onboarding-character.stories.tsx" - ], - "fingerprint": "24a7c5b43d4d43d65908ac75816a0dd42f94d4c57639e21a192ff03d9279be4e", - "stableId": "onboarding-character", - "sidebarTitle": "Getting started and access/Onboarding and first work/Onboarding/Character" - }, - { - "file": "ui/storybook/stories/onboarding/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The expanded native isolation recipe is not exercised by this retained historical tile preview. The operator QA timeout/concurrency recipe was inspected; this preview does not verify the first-task fixture’s pre-admission runtime bounds. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/onboarding.md", - "ui/src/components/onboarding/ConnectModelPreview.tsx", - "ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx" - ], - "replacement": "ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx", - "fingerprint": "427e876b5873f1643fab2439fe7450abcc51e55192cf9bda867daa33dcbb1ab7", - "stableId": "onboarding-connect-a-model", - "sidebarTitle": "Getting started and access/Onboarding and first work/Onboarding/Connect a model" - }, - { - "file": "ui/storybook/stories/task-coordination/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Creation visibility now defaults to hiding automated independent tasks, with a Show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery.", - "reviewedAt": "2026-10-13", - "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/task-coordination/originating-tasks.stories.tsx" - ], - "fingerprint": "16042f0e39379552a00b618f7dda6eea0e5227e4a90e21fbea8fe35c1ecb820f", - "stableId": "ux-labs-tasks-created-from-a-task", - "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task" - }, - { - "file": "ui/storybook/stories/overview/overview.stories.tsx", - "capabilities": [], - "purpose": "Overview/Storybook Guide", - "status": "unreviewed", - "implementation": "guide", - "boundary": "static", - "notes": "Matches the upstream feature index and order, including features with no cataloged examples. Related suite links and classifications do not imply execution coverage. The generated upstream feature index was reconciled; example scope and classifications are retained. Reviewed the regenerated liveness capability description against the feature recipe; the guide remains a static index and does not prove live readiness.", - "reviewedAt": "2026-10-13", - "sources": [ - "ui/src/components/ui/badge.tsx", - "ui/src/components/ui/input.tsx", - "ui/storybook/stories/overview/overview.stories.tsx", - "ui/storybook/support/feature-map/FeatureOverview.tsx", - "ui/storybook/generated/feature-index.json" - ], - "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "84d33d55cded070e094b69b99db8b3de5ec7e6748adb374322208f3f6f5fce35", - "stableId": "overview-storybook-guide", - "sidebarTitle": "Overview/Storybook Guide" - }, - { - "file": "ui/storybook/stories/steering/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/steering.md", - "ui/src/components/task-chat/TaskChatComposer.tsx", - "ui/storybook/prototypes/PausedTaskComposer.tsx", - "ui/storybook/stories/steering/paused-composer.stories.tsx" - ], - "replacement": "ui/storybook/stories/steering/task-execution-controls.stories.tsx", - "fingerprint": "7e7436ddeb1e004e1b11297e93f7e299600a2fa68d36993275ed2591f6b4a320", - "stableId": "composer-paused-task-takeover", - "sidebarTitle": "Tasks and conversations/Steering and queued messages/Composer/Paused task takeover" - }, - { - "file": "ui/storybook/stories/app-permissions/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/app-permissions/permitted-vs-installed.stories.tsx" - ], - "fingerprint": "8142253f986d8f969b73602f8832ded6b86f459f8ad46257af48655bc737b234", - "stableId": "tools-permitted-vs-installed", - "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed" - }, - { - "file": "ui/storybook/stories/connection-setup/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. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/connection-setup.md", - "ui/src/pages/apps/app-detail/IdentitiesSection.tsx", - "ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx" - ], - "fingerprint": "7f0d4c64425d3657c8d2662cea6541f52cb6f13fa276c02fec5398cb7df5111a", - "stableId": "reviews-pap-17835-personal-connection-identity", - "sidebarTitle": "Apps, channels, and extensions/Connection setup/Reviews/PAP-17835 Personal connection identity" - }, - { - "file": "ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx", - "capabilities": [ - "agents/primary-agent", - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/agent-chat.md", - "maps/feature-map/agents.md", - "maps/feature-map/tasks.md", - "ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx" - ], - "fingerprint": "43643869f077249b8f1feeaad01c0a0591695ed4f021138b3981a0f6f1f1862e", - "stableId": "primary-agent-00-review-guide", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide" - }, - { - "file": "ui/storybook/stories/agents/primary-agent/01-components.stories.tsx", - "capabilities": [ - "agents/primary-agent", - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/primary-agent/01-components.stories.tsx", - "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "aec3539cf6c6aadd33b257b8a713f0ae7dc7703842795ef8a279cf2d12dd475f", - "stableId": "primary-agent-01-components", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components" - }, - { - "file": "ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx", - "capabilities": [ - "agents/primary-agent", - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/primary-agent/02-sidebar.stories.tsx", - "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "2dd01020df4f76ef59ae113c40cbd8d3c6aed0807bff191e5109f0916cf34f91", - "stableId": "primary-agent-02-sidebar", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar" - }, - { - "file": "ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx", - "capabilities": [ - "agents/primary-agent", - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/primary-agent/03-agents.stories.tsx", - "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "701094b6a4915dc5e21a246e8c61e671f5bc829dfaa27d961e61606bcd629d2b", - "stableId": "primary-agent-03-agents", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents" - }, - { - "file": "ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx", - "capabilities": [ - "agents/primary-agent", - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/primary-agent/04-new-task.stories.tsx", - "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "bdd3fc028a770020cfaeca963e55d720abbc793af14b34c341c56b3c82ed916d", - "stableId": "primary-agent-04-new-task", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task" - }, - { - "file": "ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx", - "capabilities": [ - "agents/primary-agent", - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/primary-agent/05-chat.stories.tsx", - "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "ff9e06e54a9f53d288b6e1d315bae5e5fe7efaf30e0406d44cd6e333c60411eb", - "stableId": "primary-agent-05-chat", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat" - }, - { - "file": "ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx", - "capabilities": [ - "agents/primary-agent", - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/primary-agent/06-journeys.stories.tsx", - "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "ae4f8aa6148e000da8f7b7fbba1d74bff95604ec31a21e34da6afb6cac32078d", - "stableId": "primary-agent-06-journeys", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys" - }, - { - "file": "ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx", - "capabilities": [ - "agents/primary-agent", - "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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Primary choice, replacement confirmation, unavailable states and task/chat fallback presentation use local presentation-provider callbacks. Production preference persistence and default-resolution precedence remain unverified by this suite. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "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/agents/primary-agent/07-confirmation.stories.tsx", - "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx", - "ui/src/adapters/adapter-display-registry.ts" - ], - "fingerprint": "8befafb76546102c4d7f4f1778aba6ad168fd189426e3bfb0a1afc5cccafd127", - "stableId": "primary-agent-07-confirmation", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation" - }, - { - "file": "ui/storybook/stories/foundations/primitives-coverage.stories.tsx", - "capabilities": [ - "developer-labs/design" - ], - "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. Related design reference: demonstrates shared production controls and visual states in an isolated contributor fixture; retains its Foundations home. No product-journey or baseline comparison claim.", - "reviewedAt": "2026-10-13", - "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/foundations/primitives-coverage.stories.tsx", - "maps/feature-map/developer-labs.md" - ], - "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "bfacafe1d48789bac91fb595247ee767edf52cc705ba353031ccb155879b3d4c", - "stableId": "foundations-primitive-coverage", - "sidebarTitle": "Foundations/Primitive Coverage", - "home": "foundations" - }, - { - "file": "ui/storybook/stories/access/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/access.md", - "maps/feature-map/tasks.md", - "ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx" - ], - "fingerprint": "dc46ad819f4c0d925acbd1170d8a9ee4018f2b49de0241a3b3d698f154ee9257", - "stableId": "private-tasks-00-review-guide", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/00 Review guide" - }, - { - "file": "ui/storybook/stories/access/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery.", - "reviewedAt": "2026-10-13", - "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/access/private-tasks/01-creation.stories.tsx", - "ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx", - "ui/storybook/support/private-tasks/PrivacyStory.tsx" - ], - "fingerprint": "ea2ddeb4a186e49cdfb7241751e0b25b6565ddee24202c0e48169966ae3e2d96", - "stableId": "private-tasks-01-creation", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/01 Creation" - }, - { - "file": "ui/storybook/stories/access/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/access/private-tasks/02-sharing.stories.tsx", - "ui/storybook/support/private-tasks/PrivacyStory.tsx" - ], - "fingerprint": "6595d72c6af25ff292b389d88e8d2019020f4e4a6965cceb2a50b793ec03b882", - "stableId": "private-tasks-02-sharing", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/02 Sharing" - }, - { - "file": "ui/storybook/stories/access/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/access/private-tasks/03-task-actions.stories.tsx", - "ui/storybook/support/private-tasks/PrivacyStory.tsx" - ], - "fingerprint": "be8143e492deda70c9139b7e9f7022ae6b3c3b7603791074c22adb72a54adb79", - "stableId": "private-tasks-03-task-actions", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/03 Task actions" - }, - { - "file": "ui/storybook/stories/access/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/access/private-tasks/04-references-and-blockers.stories.tsx", - "ui/storybook/support/private-tasks/PrivacyStory.tsx" - ], - "fingerprint": "371547c4293f4f7e6e922113a9a6a2631bfe73979343fe70fc158b2e1fd3c5a4", - "stableId": "private-tasks-04-references-and-blockers", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers" - }, - { - "file": "ui/storybook/stories/access/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/access/private-tasks/05-projects.stories.tsx", - "ui/storybook/support/private-tasks/PrivacyStory.tsx" - ], - "fingerprint": "8b773d099d8ae633ab72108c0a4dd8b2c032aac03787ab47cda05426f456fb15", - "stableId": "private-tasks-05-projects", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/05 Projects" - }, - { - "file": "ui/storybook/stories/access/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery.", - "reviewedAt": "2026-10-13", - "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/access/private-tasks/06-full-product-pages.stories.tsx", - "ui/storybook/support/private-tasks/PrivacyStory.tsx" - ], - "fingerprint": "a394e48a19ffce759f893bee7c28a1eceea2325ee9050cf41d42059afd5460d1", - "stableId": "private-tasks-06-full-product-pages", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages" - }, - { - "file": "ui/storybook/stories/access/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation visibility now defaults to hiding automated independent tasks, with a show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery.", - "reviewedAt": "2026-10-13", - "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/access/private-tasks/01-creation.stories.tsx", - "ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx", - "ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx", - "ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx", - "ui/storybook/stories/access/private-tasks/05-projects.stories.tsx", - "ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx", - "ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx", - "ui/storybook/support/private-tasks/PrivacyStory.tsx" - ], - "fingerprint": "ce4def84f6ceeb96cd91a285053edf1913baceb6628f70ac98612969bd46cf46", - "stableId": "private-tasks-07-user-stories", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/07 User stories" - }, - { - "file": "ui/storybook/stories/projects/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/projects.md", - "maps/feature-map/workspaces.md", - "ui/src/components/ProjectProperties.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx" - ], - "fingerprint": "89c541df010f3ea0dafa6ed29e02882ffbbecca1aaa90a2606176ffe6b8f9f4d", - "stableId": "workspaces-project-runtime-provision-command", - "sidebarTitle": "Projects and execution/Projects and repositories/Workspaces/Project runtime provision command" - }, - { - "file": "ui/storybook/stories/projects/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/projects/project-repos-configuration.stories.tsx" - ], - "fingerprint": "8d96ac58686362abbaf468ba7cc400d43612fe0c8c21239cfa3fab2079ff5270", - "stableId": "proposals-project-repos-configuration", - "sidebarTitle": "Projects and execution/Projects and repositories/Proposals/Project repos/Configuration" - }, - { - "file": "ui/storybook/stories/projects/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. Task-workspace reconciliation reviewed nullable project references and guarded runtime invalidations. Existing summaries remain project-bound and retain their routes; null-project execution workspace rendering and controls remain a coverage gap. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "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/projects-goals-workspaces.stories.tsx" - ], - "fingerprint": "e7330baf164a462aaef557989a6334fd61e9b1f378dd6674f34f4e7bbe8f03bb", - "stableId": "product-projects-goals-workspaces", - "sidebarTitle": "Projects and execution/Projects and repositories/Product/Projects Goals Workspaces" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/provider-routing-00-overview.stories.tsx" - ], - "fingerprint": "e2ef473158ed16f52c6b23c92dd6d9d8b4995f5e6db09e6f1f6fecf6e02a36aa", - "stableId": "ai-connections-provider-routing-00-overview", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/00 Overview" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/provider-routing-01-onboarding.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx" - ], - "fingerprint": "969788de19b984a2fbd36809cb92273b13aa153489b3e65c026e45ce36511eaf", - "stableId": "ai-connections-provider-routing-01-onboarding", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/01 Onboarding" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/provider-routing-02-connect.stories.tsx" - ], - "fingerprint": "7555efd817b31847604a7c4e9d0990cea26357d861fb2b2d70f0826475efe621", - "stableId": "ai-connections-provider-routing-02-connect", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/02 Connect" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/provider-routing-03-agent.stories.tsx", - "ui/src/adapters/adapter-display-registry.ts", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx" - ], - "fingerprint": "489342d16df9bfc96eb1da4c6b6c219ca61472d04f69290a137590b348299608", - "stableId": "ai-connections-provider-routing-03-agent", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/03 Agent" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/provider-routing-04-manage.stories.tsx" - ], - "fingerprint": "dde1c978c8c5314881d622becfecbf2b86c8f2b39790c2268b2ca9941de175d3", - "stableId": "ai-connections-provider-routing-04-manage", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/04 Manage" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/provider-routing-05-recovery.stories.tsx" - ], - "fingerprint": "e7dad46f486fa286e3441b5e5f227f89e011c013551a23f721692616b577aa61", - "stableId": "ai-connections-provider-routing-05-recovery", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/05 Recovery" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/runs-adapters/provider-routing-06-production.stories.tsx", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx" - ], - "fingerprint": "43a234b650ba05d0d7300fed65cecd7e7bbc9f16a572ee227cfd0214bff7fc91", - "stableId": "ai-connections-provider-routing-06-production-components", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/06 Production components" - }, - { - "file": "ui/storybook/stories/gateways-profiles/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/gateways-profiles/public-mcp-connections.stories.tsx" - ], - "fingerprint": "59a7260fb8b5b123828d9d0d0d2cd081d1456bbdf0ebedf7e65e5b880fe084b5", - "stableId": "assistant-connections-manage-connections", - "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Manage connections" - }, - { - "file": "ui/storybook/stories/gateways-profiles/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/gateways-profiles/public-mcp-consent.stories.tsx" - ], - "fingerprint": "263a310d8c4fdf4c693f77dddc923880330d9be73c69cbb05b83d3ed4d59490a", - "stableId": "assistant-connections-consent", - "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Consent" - }, - { - "file": "ui/storybook/stories/gateways-profiles/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/gateways-profiles/public-mcp-device.stories.tsx" - ], - "fingerprint": "931a100cc1ad520bdb43712fad8b0284e47ad1a3ee531d55a5cbff0a430907c0", - "stableId": "assistant-connections-device-authorization", - "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Device authorization" - }, - { - "file": "ui/storybook/stories/gateways-profiles/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/gateways-profiles/public-mcp-journey.stories.tsx", - "ui/storybook/support/public-mcp-presenter.tsx" - ], - "fingerprint": "683c517cdaa396555d0bafe049401ccd9768c4d4dec58c3fc4cbbb292e7c147d", - "stableId": "assistant-connections-start-here", - "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Start here" - }, - { - "file": "ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx", - "capabilities": [ - "gateways-profiles/client-connect", - "instance-operations/configuration" - ], - "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. ToggleOnAndOff, ManagedByCloud and SaveFailedRollsBack mount production experimental settings with simulated saves. Only the assistant-connection flag is represented, not every instance setting. The recipe distinguishes process liveness from authenticated database readiness; these examples do not exercise that operator API boundary.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/gateways-profiles.md", - "ui/src/pages/InstanceExperimentalSettings.tsx", - "ui/storybook/fixtures/publicMcp.ts", - "ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx", - "maps/feature-map/instance-operations.md" - ], - "fingerprint": "edabc08f81fd7d479eb840558059ea206f55f85d2577cdb4870e0beb577cc4ac", - "stableId": "assistant-connections-experimental-setting", - "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Experimental setting" - }, - { - "file": "ui/storybook/stories/recovery/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. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "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/recovery-notice-preview.stories.tsx" - ], - "fingerprint": "44d25bc1cf087902bc991cc7fd1dc2bc19880c18189960dae47c68a9284bc0f6", - "stableId": "design-previews-recovery-notice", - "sidebarTitle": "Projects and execution/Recovery/Design previews/Recovery notice" - }, - { - "file": "ui/storybook/stories/skills/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-13", - "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/skills/github-skills-journey.stories.tsx", - "ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx" - ], - "fingerprint": "d8af830b23aa96f0a92b898b16c090e76fe4e9b986517fbf72d9cdedf840e7e4", - "stableId": "skills-repository-packages", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages" - }, - { - "file": "ui/storybook/stories/questions-and-approvals/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/questions-and-approvals/rich-acp-interactions.stories.tsx" - ], - "fingerprint": "6a524bb57fd5e0c0e70ce6cb4b7d61076293f4380f93707a6786f1cccbdcc887", - "stableId": "chat-comments-rich-acp-interactions", - "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/rich-work-product-cards.stories.tsx" - ], - "fingerprint": "e02eeeed61f5311ac298a8655906089e96ca867670a1deebcc36fb7432fb3153", - "stableId": "task-chat-rich-work-product-cards", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Task Chat/Rich Work Product Cards" - }, - { - "file": "ui/storybook/stories/routines/routine-detail-c.stories.tsx", - "capabilities": [ - "routines/definition", - "routines/management", - "activity/routine-audit" - ], - "purpose": "Product/Routines · 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. Activity mounts the shipped ActivitySection with fixture trigger/run/configuration events. This does not establish live routine execution or audit persistence.", - "reviewedAt": "2026-10-13", - "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/routines/routine-detail-c.stories.tsx", - "maps/feature-map/activity.md" - ], - "fingerprint": "853370d71e85c5e01b79d19831cba7f839f4b75af42fa51e7e94f84e31a6eb81", - "stableId": "product-routines-·-detail-variation-c", - "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)" - }, - { - "file": "ui/storybook/stories/routines/routine-secrets.stories.tsx", - "capabilities": [ - "routines/definition", - "secrets/runtime-delivery" - ], - "purpose": "Product/Routines · 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. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract.", - "reviewedAt": "2026-10-13", - "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/routines/routine-secrets.stories.tsx" - ], - "fingerprint": "ac3e04699ed84d7a11567f17b185c2bbe5c30d049586e03def563f774457e276", - "stableId": "product-routines-·-secrets-tab", - "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab" - }, - { - "file": "ui/storybook/stories/routines/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/routines/routine-webhooks-ux.stories.tsx" - ], - "fingerprint": "96129f07a13497700039df8275b2f8d3d74468793e042c01e61bda2bdc1ad8fe", - "stableId": "product-routines-webhooks-ux-preview", - "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks UX preview" - }, - { - "file": "ui/storybook/stories/routines/routine-webhooks.stories.tsx", - "capabilities": [ - "routines/triggers", - "routines/history", - "activity/routine-audit" - ], - "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. Runs and Activity mount RoutineDetail with fixture execution tasks/events and play assertions. Scheduler execution, delivery and audit persistence are not live.", - "reviewedAt": "2026-10-13", - "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/routines/routine-webhooks.stories.tsx", - "maps/feature-map/activity.md" - ], - "fingerprint": "93bdd95dd2c677ba7562f477b111486f93a081276a9e3c3a8af3c45874f20a5d", - "stableId": "product-routines-webhooks", - "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks" - }, - { - "file": "ui/storybook/stories/routines/routines-list-groups.stories.tsx", - "capabilities": [ - "routines/definition", - "routines/management" - ], - "purpose": "Product/Routines · 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/routines-list-groups.stories.tsx" - ], - "fingerprint": "02a433aeee5be2ecc3284f0a27c45c4222e3abf05cbd478e55bfb7462a301d19", - "stableId": "product-routines-·-list-grouped-cards", - "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/tasks/runner-activity.stories.tsx" - ], - "fingerprint": "98c073f2f9f587494dd07e9c90dbc38afe4ca6b5661abd8f648abeef6007466a", - "stableId": "tasks-runner-activity-preview", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview" - }, - { - "file": "ui/storybook/stories/recovery/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. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/IssueProperties.tsx", - "ui/src/components/IssueScheduledRetryCard.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/recovery/scheduled-retry.stories.tsx" - ], - "fingerprint": "94225de83234003fe6c5bdc47767e50da8562f661dbf2c5678d9fb41490a86a5", - "stableId": "product-issue-scheduled-retry-surfaces", - "sidebarTitle": "Projects and execution/Recovery/Product/Issue Scheduled retry surfaces" - }, - { - "file": "ui/storybook/stories/inbox-search/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. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/inbox-search/search.stories.tsx" - ], - "fingerprint": "a6661b568c8bc74f7667aeff4a5da84a05f507dd62679ee9039808e825eeef61", - "stableId": "product-search-command-k", - "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Product/Search & Command K" - }, - { - "file": "ui/storybook/stories/workspaces/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/workspaces.md", - "ui/src/components/SearchableSelect.tsx", - "ui/storybook/stories/workspaces/searchable-select.stories.tsx" - ], - "fingerprint": "e34c07642d243f0011ef4c589cfd061f1b20477f10ee3e299f5c197982acee3c", - "stableId": "components-searchableselect-workspace-picker", - "sidebarTitle": "Projects and execution/Workspaces, services, and files/Components/SearchableSelect/Workspace picker" - }, - { - "file": "ui/storybook/stories/secrets/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. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract.", - "reviewedAt": "2026-10-13", - "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/secrets.stories.tsx" - ], - "fingerprint": "b52b6355351b1d49d2fb5921f357fa957288ad646015c5bd99d02b5aec04fee2", - "stableId": "product-secrets", - "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Product/Secrets" - }, - { - "file": "ui/storybook/stories/runs-adapters/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/runs-adapters.md", - "ui/src/components/task-chat/RunnerGoalWidget.tsx", - "ui/storybook/stories/runs-adapters/session-goals.stories.tsx" - ], - "fingerprint": "3012a2ac98013c7f3db6f0bf91b2fefbc0772b29c497efacbe1920bf6c5fedf5", - "stableId": "composer-session-goals", - "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/Composer/Session goals" - }, - { - "file": "ui/storybook/stories/skills/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-13", - "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/skills/skill-import-progress.stories.tsx" - ], - "fingerprint": "4f517ad1f4e9a390e29d2f5f31bd78209179043f4253817b5a2788c8a4824a6c", - "stableId": "skills-import-progress", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress" - }, - { - "file": "ui/storybook/stories/skills/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/skills/skill-policy-surfaces.stories.tsx" - ], - "fingerprint": "1f39ed395b4e147167ad855f867d7cb61d4829f4077e74ffe7c53029d67b67de", - "stableId": "product-skills-policy-surfaces", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Product/Skills/Policy surfaces" - }, - { - "file": "ui/storybook/stories/skills/skills-store-detail.stories.tsx", - "capabilities": [ - "skills/discovery", - "skills/versions", - "skills/policy" - ], - "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. Related examples cover fixture revisions and agent attachment selection. Save and attachment submission callbacks are no-ops; durable authoring, grants and enforcement are not established.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/skills.md", - "ui/src/pages/CompanySkills.tsx", - "ui/storybook/stories/skills/skills-store-detail.stories.tsx" - ], - "fingerprint": "18c72ba27b8f06c186e21552c62d03a477ceb0b4f0d66253ed556830d7cc9a75", - "stableId": "skills-store-skill-detail", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail" - }, - { - "file": "ui/storybook/stories/skills/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/skills-store-discovery.stories.tsx" - ], - "fingerprint": "8f492ae3f71ac39d7a752929df767b9d37a0e782e2d3ee515cfa1b5c22d0c1a9", - "stableId": "skills-store-discovery-grid", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Discovery grid" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/chat-channels/slack-automatic-setup.stories.tsx" - ], - "fingerprint": "31f3622faa8699ee34e8a70c340c13a302b1d1184f98da084da68ddf9213d2b8", - "stableId": "connections-slack-automatic-setup", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance.", - "reviewedAt": "2026-10-13", - "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/chat-channels/slack-avatar-settings.stories.tsx" - ], - "fingerprint": "c6688ca3e157bbbd52554dff87cbe1842db9f993b78d07e810492372835d2f98", - "stableId": "connections-slack-avatar-in-settings", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Avatar in Settings" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance.", - "reviewedAt": "2026-10-13", - "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/chat-channels/slack-communication-settings.stories.tsx" - ], - "fingerprint": "176a29291c7a696273dbbe50622c0dc845015adc119c9ae162dc1c957943a177", - "stableId": "connections-slack-communication-in-settings", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Communication in Settings" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance. The recipe adds bounded Telegram subscription maintenance regressions; this story does not establish real provider startup recovery.", - "reviewedAt": "2026-10-13", - "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/chat-channels/slack-managed-setup.stories.tsx" - ], - "fingerprint": "2615f5c6c170741458801ec39bdf19f84334db7cac3e38d1115d5cc4bbdd18f2", - "stableId": "connections-slack-managed-setup", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup" - }, - { - "file": "ui/storybook/stories/chat-channels/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. Task-workspace reconciliation reviewed the added connection/destination-default recipe; these unchanged setup, identity or conversation examples do not establish default selection or new-task inheritance.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/chat-channels.md", - "ui/src/pages/apps/chat/SlackToolSettings.tsx", - "ui/storybook/stories/chat-channels/slack-tools.stories.tsx" - ], - "fingerprint": "20189b2032c2aecf3242e8d086fed9ca0b02d7adaa80aff9a69b60f1b23bce18", - "stableId": "connections-slack-task-tools", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Task tools" - }, - { - "file": "ui/storybook/stories/recovery/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. Source review confirms ordinary recovery fixtures remain applicable after the native-owner resolution gate; native-owner stop verification has its own suite. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "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/recovery/source-issue-recovery.stories.tsx" - ], - "fingerprint": "e83979b6d2737fef8666a36860817af9272d4d4df649a0784c04e4bc32b63028", - "stableId": "paperclip-source-issue-recovery", - "sidebarTitle": "Projects and execution/Recovery/Paperclip/Source Issue Recovery" - }, - { - "file": "ui/storybook/stories/recovery/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. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/SourceResolvedFoldBadge.tsx", - "ui/src/components/SourceResolvedFoldCallout.tsx", - "ui/storybook/stories/recovery/source-resolved-fold.stories.tsx" - ], - "fingerprint": "6b42874521d91e0aa6323fb4d6744a6abd7931fda54e6591bdac9131fa2abaa4", - "stableId": "paperclip-source-resolved-fold", - "sidebarTitle": "Projects and execution/Recovery/Paperclip/Source-resolved Fold" - }, - { - "file": "ui/storybook/stories/foundations/status-language.stories.tsx", - "capabilities": [ - "developer-labs/design" - ], - "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. Related design reference: demonstrates shared production controls and visual states in an isolated contributor fixture; retains its Foundations home. No product-journey or baseline comparison claim.", - "reviewedAt": "2026-10-13", - "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/foundations/status-language.stories.tsx", - "maps/feature-map/developer-labs.md" - ], - "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "9cf8b929ba0d6ad4d8d2a6711aa7fb609ef57069d87a050f77dd389de608ee36", - "stableId": "foundations-status-language", - "sidebarTitle": "Foundations/Status Language", - "home": "foundations" - }, - { - "file": "ui/storybook/stories/task-coordination/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. Creation visibility now defaults to hiding automated independent tasks, with a Show agent-created tasks control and inbox participation exceptions. Source alignment reviewed; these fixture stories do not establish live server pagination or authorization. Creation visibility now shares the subscribed preference across modern and legacy controls; hierarchy child reads share a bounded rendering budget. Source alignment inspected; server behavior is tested separately. Hierarchy fetch and rendering budgets are separate; loaded context remains during paging. The large-tree UI regression exercises delayed reads in both list interfaces.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/task-coordination.md", - "ui/src/components/IssuesList.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx" - ], - "fingerprint": "4461d14e90da3e93b82826efdddf131ae014c61a040f33cfae1df1368c6ddb2d", - "stableId": "ux-labs-sub-issues-workflow-checklist", - "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist" - }, - { - "file": "ui/storybook/stories/tasks/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "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/tasks/successful-run-handoff.stories.tsx" - ], - "fingerprint": "58d58a28f56037e392ab0f52d971f4c21f8745f84337552bc45bbeeffd0c6655", - "stableId": "paperclip-successful-run-handoff", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff" - }, - { - "file": "ui/storybook/stories/agents/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. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/agents.md", - "ui/src/components/SummarySlotCard.tsx", - "ui/storybook/stories/agents/summary-slot-card.stories.tsx" - ], - "fingerprint": "52c5d0845dc91db5cdf1b8d11ca57aa03b064e4cfea1250acaf473d9c900905e", - "stableId": "summaries-summaryslotcard", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Summaries/SummarySlotCard" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/task-artifact-gallery.stories.tsx" - ], - "fingerprint": "4d8181361cd7fd9c38ad04cde9ce1ed245498d063650890ca356a6c1e304c448", - "stableId": "tasks-artifact-gallery", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Codex selection/branding and upstream recipe source changes inspected; prior parity limitations remain, with no new rendered or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "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/tasks/task-chat-chain-of-thought.stories.tsx" - ], - "fingerprint": "cef7fee6be9970cfaf2e7a9c4b2026b3b60adddc179082c8f646e1936139fc67", - "stableId": "tasks-task-chat-review-fixes", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes" - }, - { - "file": "ui/storybook/stories/questions-and-approvals/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior.", - "reviewedAt": "2026-10-13", - "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/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx" - ], - "fingerprint": "a50e649ffce57fafe3ca37b31260463156238af8e58244b3cf33fdeac08353e2", - "stableId": "composer-interaction-above-composer", - "sidebarTitle": "Tasks and conversations/Questions and approvals/Composer/Interaction above composer" - }, - { - "file": "ui/storybook/stories/tasks/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/tasks/task-chat-mobile-follow.stories.tsx" - ], - "fingerprint": "840c21389fca0bf13a1df0d247a9d63836d8f38f4ca95c04838ca0cf36b881d9", - "stableId": "task-chat-mobile-streaming-follow", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Task chat/Mobile streaming follow" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/tasks/task-chat-system-notice.stories.tsx" - ], - "fingerprint": "1dd5a86762602b618007a3ed83d0500074560bb9168e7f1873aab0aad555deef", - "stableId": "product-task-chat-system-notice", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Task chat/System notice" - }, - { - "file": "ui/storybook/stories/questions-and-approvals/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/questions-and-approvals/task-chat-unanswered-questions.stories.tsx" - ], - "fingerprint": "2eb8af0c7b2ecf6914c9bf5d1351427309a5a3ce31b90124c82c23dc2b50bf54", - "stableId": "chat-comments-task-chat-unanswered-questions", - "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work. Source review covers the retained-file recovery form, source-bound evidence and unchanged task status; fixture APIs do not prove live provider recovery.", - "reviewedAt": "2026-10-13", - "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/tasks/task-context-notices.stories.tsx" - ], - "fingerprint": "794484576911fdab4a9b16db119890b75403316a8a4bbcce4041aee241c95193", - "stableId": "tasks-context-notices", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Tasks/Context notices" - }, - { - "file": "ui/storybook/stories/steering/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior.", - "reviewedAt": "2026-10-13", - "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/steering/task-execution-controls.stories.tsx" - ], - "fingerprint": "8ac1afb1d07856297cf68417d309a9361a719eacceb9162ed54c86304e3c4634", - "stableId": "composer-execution-controls", - "sidebarTitle": "Tasks and conversations/Steering and queued messages/Composer/Execution controls" - }, - { - "file": "ui/storybook/stories/documents-artifacts/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/documents-artifacts/task-text-files.stories.tsx" - ], - "fingerprint": "1028fe178cec6a8d04100a1a89364cd64ffda5112e5235443ad47e4f4ef0358f", - "stableId": "tasks-text-file-tabs", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Tasks/Text file tabs" - }, - { - "file": "ui/storybook/stories/task-coordination/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-coordination/task-watchdog-surfaces.stories.tsx" - ], - "fingerprint": "ac40d01fdf92f09aeeb648ffe0a8304f5ea7aa8b47ab36bf7a62c89a1603a791", - "stableId": "product-task-watchdog-surfaces", - "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/Product/Task Watchdog surfaces" - }, - { - "file": "ui/storybook/stories/teams/team-catalog.stories.tsx", - "capabilities": [ - "teams/preview", - "teams/discovery", - "teams/install", - "teams/configuration" - ], - "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. InstallApplyProgress, InstallSuccess and InstalledStates show simulated installation results; InstallPreview edits adapter choices in local state. No routed catalog, real package installation, account setup or working-agent proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/teams.md", - "ui/src/pages/TeamCatalog.fixtures.ts", - "ui/src/pages/TeamCatalog.tsx", - "ui/storybook/stories/teams/team-catalog.stories.tsx" - ], - "fingerprint": "00b449499c3b79649dc1f29b5f105996c79e063b3d03c31226d861ad2954803b", - "stableId": "surfaces-team-catalog", - "sidebarTitle": "Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/tasks.md", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx", - "ui/storybook/support/thread-human-identity/fixtures.ts" - ], - "fingerprint": "cb8b7d0dcdbd27bcaa16d2fcbc86e776b32db875bc6b4de3d752caa5aa9119da", - "stableId": "chat-comments-human-identity-00-review-guide", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/00 Review guide" - }, - { - "file": "ui/storybook/stories/tasks/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. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/tasks/thread-human-identity/01-components.stories.tsx", - "ui/storybook/support/thread-human-identity/fixtures.ts" - ], - "fingerprint": "d87a48d3be494149116ab8fd366e90c17aa2e23805fb1f0d896464e10ba35b04", - "stableId": "chat-comments-human-identity-01-components", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/01 Components" - }, - { - "file": "ui/storybook/stories/tasks/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/tasks.md", - "ui/src/components/Layout.tsx", - "ui/src/components/TaskChatThread.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx", - "ui/storybook/support/thread-human-identity/fixtures.ts" - ], - "fingerprint": "68b3cca3a5ed9b116b34bd1dde6ca8012c350c2a7c2b60cc928d7e5b30da8694", - "stableId": "chat-comments-human-identity-02-mixed-author-journey", - "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/02 Mixed-author journey" - }, - { - "file": "ui/storybook/stories/secrets/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. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract.", - "reviewedAt": "2026-10-13", - "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/secrets/user-secrets.stories.tsx" - ], - "fingerprint": "7946ebdc6c576de9cdd30205131073f5029aec8e094397bab66c300c1f3a79ea", - "stableId": "product-user-secrets", - "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Product/User secrets" - }, - { - "file": "ui/storybook/stories/developer-labs/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/developer-labs/ux-labs.stories.tsx" - ], - "fingerprint": "b8df6cf57fcda25d2b175bc3156d539fb71055b5dae069bca61af8903a01aaf8", - "stableId": "ux-labs-converted-test-pages", - "sidebarTitle": "Contributor surfaces/Developer previews and diagnostic labs/UX Labs/Converted Test Pages" - }, - { - "file": "ui/storybook/stories/inbox-search/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. Creation-visibility verification recipes were updated; this story scenario is unchanged and does not prove that journey. The filter uses one lowercase label without helper text. All chat-channel tasks count as bot-created; the focused visibility stories cover human-initiated channel work.", - "reviewedAt": "2026-10-13", - "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/inbox-search/what-needs-me.stories.tsx" - ], - "fingerprint": "0920cb3c4e75ba896955144a41f714a18dc778ec63f7b3abfa7e08b1032c0e94", - "stableId": "pages-decisions", - "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Pages/Decisions" - }, - { - "file": "ui/storybook/stories/activity/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/activity/work-timeline.stories.tsx" - ], - "fingerprint": "4f6e9f556073d4bc6a812f633bcff32cb84c4c02488746b37797501684ef3899", - "stableId": "pages-work-timeline", - "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Pages/Work Timeline" - }, - { - "file": "ui/storybook/stories/recovery/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. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/WorkspaceBaseRefRecoveryNotice.tsx", - "ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx", - "ui/storybook/support/workspace-branch-recovery/fixtures.ts" - ], - "fingerprint": "449d4ae2d427627089327567690e88219a14dfaeac3265bb3014cf1555e0da5d", - "stableId": "workspace-branch-recovery-01-repair-card", - "sidebarTitle": "Projects and execution/Recovery/Workspace branch recovery/01 Repair card" - }, - { - "file": "ui/storybook/stories/recovery/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. Master reconciliation inspected assignment-history recipient suggestions and manual-selection retention; existing stories do not establish the new assignment-history behavior. Expanded upstream verification recipes were inspected; the existing fixture scenarios do not prove the added backend handoff, workspace, recovery or authorization contracts. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "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/recovery/workspace-branch-recovery/02-task-journey.stories.tsx", - "ui/storybook/support/workspace-branch-recovery/fixtures.ts" - ], - "fingerprint": "c30653d1cd266832f7bdd401bc302a579d4170b7ea9b2523feccbdc66a58e997", - "stableId": "workspace-branch-recovery-02-task-journey", - "sidebarTitle": "Projects and execution/Recovery/Workspace branch recovery/02 Task journey" - }, - { - "file": "ui/storybook/stories/workspaces/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/workspaces.md", - "ui/src/components/FileViewerSheet.tsx", - "ui/src/components/IssueWorkspaceCard.tsx", - "ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx" - ], - "fingerprint": "a37dfdde49f89e907842859bfebde7d3c88a4ebabce4d003a9e4f722b73bb098", - "stableId": "issue-workspace-file-browser", - "sidebarTitle": "Projects and execution/Workspaces, services, and files/Issue/Workspace File Browser" - }, - { - "file": "ui/storybook/stories/workspaces/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. Task-workspace reconciliation reviewed ExecutionWorkspaceDetail null-project handling. This suite mounts only the unchanged RuntimeProvisionStatusValue inside a local context row; it does not exercise the full detail page or projectless queries. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/workspaces.md", - "ui/src/pages/ExecutionWorkspaceDetail.tsx", - "ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx" - ], - "fingerprint": "4a4e9dc99829632e221a1c558f54502bbba8b1547768d0fdce97cad3c0c5fc02", - "stableId": "workspaces-runtime-provisioning-status", - "sidebarTitle": "Projects and execution/Workspaces, services, and files/Workspaces/Runtime provisioning status" - }, - { - "file": "ui/storybook/stories/workspaces/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. Task-workspace reconciliation reviewed the expanded workspace recipe; these examples do not establish durable task-folder continuity, repository authorization or sandbox admission. The workspace recipe now requires child boundary, safe reopen and checkpoint ancestry controls; these backend checks are not established by this fixture. The provisioning recipe requires controller script denial for remote selections and copy-only local source choices, including retained denial through metadata changes and reopening; these fixtures do not verify execution placement. Canonical default provisioning follows configured policy, primary, creation time and ID; these fixtures do not run source hooks or establish this backend precedence. The added verification recipe documents remote-source isolation and lifecycle guards; existing fixtures do not establish live provider recovery. The source recipe now excludes literal and task-independent branch templates; these fixtures do not execute that backend admission guard. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/workspaces.md", - "ui/src/components/WorkspaceServiceControlBar.tsx", - "ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx" - ], - "fingerprint": "01ffe1c604d850af606be5ebd4a4ba652716ef6b1ca833d6aa6f8d564ced64c1", - "stableId": "workspaces-service-control-bar", - "sidebarTitle": "Projects and execution/Workspaces, services, and files/Workspaces/Service control bar" - }, - { - "file": "ui/storybook/stories/recovery/workspace-finalization-recovery/01-notice.stories.tsx", - "capabilities": [ - "recovery/workspace", - "recovery/source-action" - ], - "purpose": "Workspace finalization recovery/01 Notice", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production quiet status; automatic restoration, legacy operator fallback, queued and resolved states. No task repair form, process details or API simulation. Provider proof is verified by separate server and harness tests. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/WorkspaceExportRecovery.tsx", - "ui/storybook/stories/recovery/workspace-finalization-recovery/01-notice.stories.tsx", - "ui/storybook/support/workspace-finalization-recovery/fixtures.tsx" - ], - "fingerprint": "5026bd7133f40a9c61371e22ed6976efc67013fd3047bf85056026de86bf6cec", - "stableId": "workspace-finalization-recovery-01-notice", - "sidebarTitle": "Projects and execution/Recovery/Workspace finalization recovery/01 Notice" - }, - { - "file": "ui/storybook/stories/recovery/workspace-finalization-recovery/02-task-journey.stories.tsx", - "capabilities": [ - "recovery/workspace", - "recovery/source-action" - ], - "purpose": "Workspace finalization recovery/02 Task journey", - "status": "unreviewed", - "implementation": "mixed", - "boundary": "fixtures", - "notes": "Production shell, status, bubbles and composer in a local conversation composition; shows restoration and saved work waiting for confirmation. Fixture messages; not the shipped task page or live provider acceptance. The added verification recipe documents source-only retained-file repair; existing fixtures do not establish live provider recovery.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/Layout.tsx", - "ui/src/components/WorkspaceExportRecovery.tsx", - "ui/src/components/task-chat/TaskChatBubble.tsx", - "ui/src/components/task-chat/TaskChatComposer.tsx", - "ui/storybook/stories/recovery/workspace-finalization-recovery/02-task-journey.stories.tsx", - "ui/storybook/support/workspace-finalization-recovery/fixtures.tsx" - ], - "fingerprint": "934a8f1882d8b5f5381aba9d0f27026849870a1fa417178fb6bc4170c54b15ba", - "stableId": "workspace-finalization-recovery-02-task-journey", - "sidebarTitle": "Projects and execution/Recovery/Workspace finalization recovery/02 Task journey" - }, - { - "file": "ui/storybook/stories/agents/codex-runner/creation.stories.tsx", - "capabilities": [ - "agents/hire", - "runs-adapters/validation" - ], - "purpose": "Agents/Codex runner/Creation", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production NewAgent and AgentBasicsDialog with isolated API fixtures. Automatic and explicit Legacy choices, qualified/unqualified discovery, old native links, setup failure and returned hire identity are asserted in source. Fixture runtime selection follows the requested runner and simulated target qualification; render/play, production persistence and provider execution are not verified by this source pass. AgentConfigForm shared-module dropdown changes inspected; this suite demonstrates imported picker fields or substitutes local runtime content, not the updated environment and Codex lifecycle/ACP controls. No new render/play or live proof. The managed-link credential and confirmed probe-retirement recipe was inspected; fixture responses do not verify a real account or cleanup.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/agents.md", - "maps/feature-map/runs-adapters.md", - "ui/src/pages/NewAgent.tsx", - "ui/src/components/new-agent/NewAgentSetup.tsx", - "ui/src/components/new-agent/AgentBasicsDialog.tsx", - "ui/src/components/new-agent/AgentProviderConnection.tsx", - "ui/src/components/AgentConfigForm.tsx", - "ui/src/components/CodexRunnerSelect.tsx", - "ui/src/components/ui/select.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/fixtures/onboardingEnvironment.ts", - "ui/storybook/stories/agents/codex-runner/creation.stories.tsx" - ], - "fingerprint": "ef8333ecc416c0098cb887128a59a7fd77af91be89f9dec07b28d4f0e2c505f2", - "stableId": "agents-codex-runner-creation", - "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Codex runner/Creation" - }, - { - "file": "ui/storybook/stories/instance-operations/backup-retention.stories.tsx", - "capabilities": [ - "instance-operations/backup", - "instance-operations/configuration" - ], - "purpose": "Oversight and operation/Instance operations/Backup retention", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Retention presets, initial read, loading, error, denial and pending/saved selection in InstanceGeneralSettings. Backup creation/restore and real settings authority remain production obligations. The recipe distinguishes process liveness from authenticated database readiness; these examples do not exercise that operator API boundary. The Codex branch relocates the liveness/readiness recipe paragraph to operator verification without changing its contract; this suite retains separate backup/restore and live readiness obligations.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/instance-operations.md", - "ui/src/pages/InstanceGeneralSettings.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/instance-operations/backup-retention.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-backup-retention", - "sidebarTitle": "Oversight and operation/Instance operations/Backup retention", - "fingerprint": "84073c2062227715cae2cc3d712c0bae8cbb15eedcf255ad652068a9efca5608" - }, - { - "file": "ui/storybook/stories/recovery/recovery-gap-states.stories.tsx", - "capabilities": [ - "recovery/exhaustion", - "recovery/unknown-outcome" - ], - "purpose": "Projects and execution/Recovery/Exhaustion and user decisions", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Exhaustion notice, blocked authority, retry pending/failure/accepted and inactive notice; unknown-outcome action card is rendered separately. Retry callbacks and disposition context are simulated; no real continuation proof. The expanded native copyback recovery recipe requires harness stop proof; these generic exhaustion/queued-response fixtures do not establish that path. Retained legacy files use a separate recovery form with verified stop evidence; these exhaustion and response-queue examples do not establish file repair.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "ui/src/components/DispositionRecoveryNotice.tsx", - "ui/src/components/IssueRecoveryActionCard.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/recovery/recovery-gap-states.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-recovery-gap-states", - "sidebarTitle": "Projects and execution/Recovery/Exhaustion and user decisions", - "fingerprint": "8eb7fd4ef6387f3b39c3c83ac6fe945761999a0c2c6a9eb124e2c4550f8718a1" - }, - { - "file": "ui/storybook/stories/steering/durable-response-queue.stories.tsx", - "capabilities": [ - "steering/approval-queue", - "recovery/user-continuation" - ], - "purpose": "Tasks and conversations/Steering and queued messages/Accepted response delivery", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Accepted immutable response, cleanup wait, unavailable admission, empty queue and interrupt delivery states. Local callbacks remove delivered entries; durable queue/coalescing and fresh-session authority need production tests. The expanded native copyback recovery recipe requires harness stop proof; these generic exhaustion/queued-response fixtures do not establish that path. The shipped pending-delivery path removes rows optimistically and shows no separate progress indicator; the Delivering story asserts that actual presentation. Retained legacy files use a separate recovery form with verified stop evidence; these exhaustion and response-queue examples do not establish file repair.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/recovery.md", - "maps/feature-map/steering.md", - "ui/src/components/task-chat/TaskChatQueuedMessages.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/steering/durable-response-queue.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-durable-response-queue", - "sidebarTitle": "Tasks and conversations/Steering and queued messages/Accepted response delivery", - "fingerprint": "9dce4d11180c4e178e8e2c23d85175f97256d8137727076c6fbc979ea3fd1734" - }, - { - "file": "ui/storybook/stories/workspaces/workspace-close.stories.tsx", - "capabilities": [ - "workspaces/closure" - ], - "purpose": "Projects and execution/Workspaces, services, and files/Close readiness", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Readiness dialog with loading, inspection failure/403, running-task block and pending/accepted archive response. No real workspace cleanup, Git removal or service shutdown is performed. The separate remote-source recipe requires Git isolation and preservation of unpublished task work; these close-readiness fixtures do not exercise repository cloning or reconstruction. The remote fallback requires current default provenance; these examples do not prove admission for explicit or inherited checkout bindings.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/workspaces.md", - "ui/src/components/ExecutionWorkspaceCloseDialog.tsx", - "ui/src/components/ToastViewport.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/workspaces/workspace-close.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-workspace-close", - "sidebarTitle": "Projects and execution/Workspaces, services, and files/Close readiness", - "fingerprint": "08b1e604b188130184296c8aee286f8dde12c8026654f0760388bd492e1ffe5b" - }, - { - "file": "ui/storybook/stories/budgets-costs/budget-resolution.stories.tsx", - "capabilities": [ - "budgets-costs/resolution" - ], - "purpose": "Oversight and operation/Costs and budgets/Resolve a budget incident", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Shipped Costs budget tab with empty/read failures, invalid amount, raise-and-resume, keep-paused and write failure/pending. Fixture incident transitions only; real overlapping holds and hard stops remain separate. The upstream budget UI distinguishes soft warnings from hard stops; hard incidents retain raise-and-resume and keep-paused controls.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/budgets-costs.md", - "ui/src/pages/Costs.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/budgets-costs/budget-resolution.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-budget-resolution", - "sidebarTitle": "Oversight and operation/Costs and budgets/Resolve a budget incident", - "fingerprint": "8cf347aa01c0b4cb1364735794581b9123a23aba2151278a1a83354d582053ef" - }, - { - "file": "ui/storybook/stories/activity/run-audit.stories.tsx", - "capabilities": [ - "activity/runs" - ], - "purpose": "Oversight and operation/Dashboards and audit trails/Execution history", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "AuditRuns list, completed receipt, empty/loading/failed/denied and no-match filter. Run records are fixture snapshots; no real execution or scoped audit proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/activity.md", - "ui/src/pages/audit/AuditRuns.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/activity/run-audit.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-run-audit", - "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Execution history", - "fingerprint": "0a43211053a4c36b6ae4061a624b7e223660931b565a234a829b38d53eab4861" - }, - { - "file": "ui/storybook/stories/secrets/proposal-review.stories.tsx", - "capabilities": [ - "secrets/proposals" - ], - "purpose": "Apps, channels, and extensions/Secrets and proposals/Proposal review", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Pending proposal, authority preflight block, list states and rejected proposal/rejection error. ProposalsTab and its dialogs are shipped; secret creation, values and grant authority are not exercised. Agent-owned instance secrets remain in trusted server runtime and are excluded from ordinary agent delivery; these UI examples do not verify that lifecycle contract.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/secrets.md", - "ui/src/components/ToastViewport.tsx", - "ui/src/pages/secrets/ProposalsTab.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/secrets/proposal-review.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-secret-proposal-review", - "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Proposal review", - "fingerprint": "eb3a67d3543f732a6be88f3a2ee9b070f171ff18a037f1869f64b3edd66dfb14" - }, - { - "file": "ui/storybook/stories/gateways-profiles/gateway-tokens.stories.tsx", - "capabilities": [ - "gateways-profiles/tokens" - ], - "purpose": "Apps, channels, and extensions/Tool gateways and access profiles/Named gateway tokens", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Named, empty and expired token history; issuance pending/error/403/success and name-confirmed revocation. Tokens are fictional; real bearer expiry, scope and revocation need API verification.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/gateways-profiles.md", - "ui/src/api/tools.ts", - "ui/src/components/ToastViewport.tsx", - "ui/src/pages/apps/gateways/NewGatewayDialog.tsx", - "ui/src/pages/apps/gateways/panels/TokensPanel.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/gateways-profiles/gateway-tokens.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-gateway-tokens", - "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Named gateway tokens", - "fingerprint": "0c565737015544b791cf7b4fda2f80fd9456368aeb8f0df0f9a4f60ad221b028" - }, - { - "file": "ui/storybook/stories/access/cli-authorization.stories.tsx", - "capabilities": [ - "access/cli-auth" - ], - "purpose": "Getting started and access/Login, invitations, and access/CLI authorization", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Real CliAuth route with pending/expired/unavailable/preflight denial, approval/cancel and write pending/error. Fictional challenge; no CLI identity or real token is authorized.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/access.md", - "ui/src/lib/router.tsx", - "ui/src/pages/CliAuth.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/access/cli-authorization.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-cli-authorization", - "sidebarTitle": "Getting started and access/Login, invitations, and access/CLI authorization", - "fingerprint": "c87b678d05b7818fd201f97c7e41cd92ce25520123ef4d20b56dd0c9785455ee" - }, - { - "file": "ui/storybook/stories/access/sign-in.stories.tsx", - "capabilities": [ - "access/login" - ], - "purpose": "Getting started and access/Login, invitations, and access/Sign in", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "AuthPage email form, session read loading/error, submission pending/failure and navigation to Companies after a fixture session. Real authentication, bootstrap claim and sign-out remain separate.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/access.md", - "ui/src/lib/router.tsx", - "ui/src/pages/Auth.tsx", - "ui/src/pages/Companies.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/access/sign-in.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-sign-in", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Sign in", - "fingerprint": "b9524d5f5a97e14c7e3bc5989b94ebe0fea56ab8767df5c5efb24430b003d491" - }, - { - "file": "ui/storybook/stories/access/membership.stories.tsx", - "capabilities": [ - "access/membership" - ], - "purpose": "Getting started and access/Login, invitations, and access/Organization membership", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "CompanyAccess member list and role change with loading/empty/failure/403 and failed mutation toast. Backend actor authority, invite lifecycle and durable membership are not verified.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/access.md", - "ui/src/components/ToastViewport.tsx", - "ui/src/pages/CompanyAccess.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/access/membership.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-membership", - "sidebarTitle": "Getting started and access/Login, invitations, and access/Organization membership", - "fingerprint": "8bd65a1aa65dc4e4767390eefb1b731a410ff852ac6eced05f5e3e5249d1a356" - }, - { - "file": "ui/storybook/stories/companies/company-selection.stories.tsx", - "capabilities": [ - "companies/selection", - "companies/archive" - ], - "purpose": "Getting started and access/Companies and portability/Selection and archived organizations", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Companies list, selection storage and archived-company restoration with loading/empty/error/403. This covers the archive list/restoration side; CompanySettings archive confirmation remains an additional UI scenario.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/companies.md", - "ui/src/pages/Companies.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/companies/company-selection.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-company-selection", - "sidebarTitle": "Getting started and access/Companies and portability/Selection and archived organizations", - "fingerprint": "0275b0bd6538672ef381ffb6fbdf68b7611e93df97334246cb4b3b1c6856bc17" - }, - { - "file": "ui/storybook/stories/plugins/plugin-management.stories.tsx", - "capabilities": [ - "plugins/installation", - "plugins/lifecycle" - ], - "purpose": "Apps, channels, and extensions/Plugins/Installation and lifecycle", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "PluginManager list states, install pending/error/success, disable and uninstall receipts. Local record transitions only; package loading and worker lifecycle require production verification.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/plugins.md", - "ui/src/components/ToastViewport.tsx", - "ui/src/pages/PluginManager.tsx", - "ui/src/pages/PluginSettings.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/plugins/plugin-management.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/plugins.ts" - ], - "stableId": "feature-plugin-management", - "sidebarTitle": "Apps, channels, and extensions/Plugins/Installation and lifecycle", - "fingerprint": "fd52b6f6966ae05ad7ffb755eebcfa0aeb6d9cb7c246a9def116de663eb5feeb" - }, - { - "file": "ui/storybook/stories/plugins/plugin-configuration.stories.tsx", - "capabilities": [ - "plugins/configuration" - ], - "purpose": "Apps, channels, and extensions/Plugins/Configuration", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "PluginSettings configuration route with hydrated values, read pending/unavailable and saved/error/403 responses. Real config storage and plugin worker validation are not proved.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/plugins.md", - "ui/src/lib/router.tsx", - "ui/src/pages/PluginManager.tsx", - "ui/src/pages/PluginSettings.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/plugins/plugin-configuration.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/plugins.ts" - ], - "stableId": "feature-plugin-configuration", - "sidebarTitle": "Apps, channels, and extensions/Plugins/Configuration", - "fingerprint": "b80dc4cfa9311c9df6fb795a4b481405144342a9003062b2e0d8397d6f8b68e1" - }, - { - "file": "ui/storybook/stories/plugins/plugin-contributions.stories.tsx", - "capabilities": [ - "plugins/contributions" - ], - "purpose": "Apps, channels, and extensions/Plugins/Contributed routes", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production PluginPage host with a registered fixture plugin component; pending/missing contribution and discovery failure. Discovery failure currently remains Loading; contribution contents are a fixture, not shipped plugin code.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/plugins.md", - "ui/src/lib/router.tsx", - "ui/src/pages/PluginManager.tsx", - "ui/src/pages/PluginPage.tsx", - "ui/src/pages/PluginSettings.tsx", - "ui/src/plugins/slots.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/plugins/plugin-contributions.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/plugins.ts" - ], - "stableId": "feature-plugin-contributions", - "sidebarTitle": "Apps, channels, and extensions/Plugins/Contributed routes", - "fingerprint": "09b20d50e157c332613c3c03ccded5ae21804011005891cacd4342ce653b8d67" - }, - { - "file": "ui/storybook/stories/cases/case-browse.stories.tsx", - "capabilities": [ - "cases/browse" - ], - "purpose": "Automation and structured work/Cases/Browse and hierarchy", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Cases page with fixture parent/child records and loading/empty/error/403. Failed list queries currently use the shipped empty-case presentation. Responsive duplicate labels are accounted for; server filters and case mutations remain separate.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/cases.md", - "ui/src/pages/Cases.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/cases/case-browse.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/cases.ts" - ], - "stableId": "feature-case-browse", - "sidebarTitle": "Automation and structured work/Cases/Browse and hierarchy", - "fingerprint": "41f3255e05cc2ca30fc22ff25748cff9b7017189f6ebb71d6f42827602237691" - }, - { - "file": "ui/storybook/stories/cases/case-detail.stories.tsx", - "capabilities": [ - "cases/structure", - "cases/history", - "cases/task-links" - ], - "purpose": "Automation and structured work/Cases/Structure, history and task links", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "CaseDetail hierarchy and activity, CaseFieldsPanel arbitrary/empty data and IssueCasesPanel reverse links. Fixture relations/events; document revision history and persisted links remain production obligations.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/cases.md", - "ui/src/components/CaseFieldsPanel.tsx", - "ui/src/components/IssueCasesPanel.tsx", - "ui/src/lib/router.tsx", - "ui/src/pages/CaseDetail.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/cases/case-detail.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/cases.ts" - ], - "stableId": "feature-case-detail", - "sidebarTitle": "Automation and structured work/Cases/Structure, history and task links", - "fingerprint": "13a24fcf6de97812864194104d14343ec50130ba6aa5405078a1b127778ab0cf" - }, - { - "file": "ui/storybook/stories/status-cards/status-card-states.stories.tsx", - "capabilities": [ - "status-cards/authoring", - "status-cards/generation", - "status-cards/inspection", - "status-cards/archive" - ], - "purpose": "Automation and structured work/Status cards/Authoring, updates and archive", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "StatusCards board/drawer with current/stale/error/live setup, list states, create, refresh, inspection and archive/restoration. Mutable receipts and setup task ID are fixtures; no summarizer execution or revision-history parity is claimed.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/status-cards.md", - "ui/src/lib/router.tsx", - "ui/src/pages/StatusCards/ArchivedStatusCardRow.tsx", - "ui/src/pages/StatusCards/CreateStatusCardDialog.tsx", - "ui/src/pages/StatusCards/StatusCardDetailDrawer.tsx", - "ui/src/pages/StatusCards/StatusCardTile.tsx", - "ui/src/pages/StatusCards/index.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/status-cards/status-card-states.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/status-cards.ts" - ], - "stableId": "feature-status-card-states", - "sidebarTitle": "Automation and structured work/Status cards/Authoring, updates and archive", - "fingerprint": "c6f52ca5e82fa4a14bc10b30177a0a9e689cd37d83fc5afbee77370f707bb13f" - }, - { - "file": "ui/storybook/stories/goals/goal-alignment.stories.tsx", - "capabilities": [ - "goals/alignment", - "goals/navigation" - ], - "purpose": "Projects and execution/Goals and work alignment/Aligned work and navigation", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "GoalDetail child navigation and aligned-project tab with empty/loading/failure/403. Current UI displays relationships but has no project goal-assignment control; no invented assignment UI.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/goals.md", - "ui/src/lib/router.tsx", - "ui/src/pages/GoalDetail.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/goals/goal-alignment.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-goal-alignment", - "sidebarTitle": "Projects and execution/Goals and work alignment/Aligned work and navigation", - "fingerprint": "a9a4bc0845dbed28f5cc458713f4ceecb3641a9ba1b60fe1867f3b573a471622" - }, - { - "file": "ui/storybook/stories/companies/company-import.stories.tsx", - "capabilities": [ - "companies/portability" - ], - "purpose": "Getting started and access/Companies and portability/Import preview", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Shipped CompanyImport GitHub-source preview, warnings, pending, error and 403. Plan/package replies are fictional; export, final import and real package fidelity remain separate scenarios/contracts. The merged production import page includes Codex harness/runner selection and preservation of native settings. This fixture review does not prove automatic native execution, credential reuse, import persistence or provider behavior.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/companies.md", - "ui/src/pages/CompanyImport.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/companies/company-import.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-company-import", - "sidebarTitle": "Getting started and access/Companies and portability/Import preview", - "fingerprint": "8cc9a61cc8224e050526635be9ac89e16496ecd15d575828e0a135baf0c6b82d" - }, - { - "file": "ui/storybook/stories/inbox-search/inbox-views.stories.tsx", - "capabilities": [ - "inbox-search/views" - ], - "purpose": "Tasks and conversations/Inbox, decisions, and search/Personal task views", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Shipped Inbox host with Mine/Recent/Unread/Blocked under combined-inbox flags and list states. Approvals/join requests/run lists are isolated alongside tasks. Failed/denied list queries currently fall back to Inbox zero; personal participation/read metadata and server counts remain production verification. Mine/recent fixture tasks are human-created; the upstream agent-created-task filter changes are separate visibility scenarios.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/inbox-search.md", - "ui/src/pages/Inbox.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/inbox-search/inbox-views.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-inbox-views", - "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Personal task views", - "fingerprint": "6b0a316d05b6e02af3c50075086063ae9c748ea4edc0e67156235bcc1eb8e21b" - }, - { - "file": "ui/storybook/stories/skills/skill-test-runs.stories.tsx", - "capabilities": [ - "skills/testing" - ], - "purpose": "Agents and reusable capabilities/Skills and Skill Studio/Test runs", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "SkillStudio test history statuses and result detail with immutable fixture output/version. No agent/provider runs; authoring, harness execution, persisted costs and snapshots require production tests.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/skills.md", - "ui/src/lib/router.tsx", - "ui/src/pages/SkillStudio.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/skills/skill-test-runs.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/skills.ts" - ], - "stableId": "feature-skill-test-runs", - "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Test runs", - "fingerprint": "4685add5676a5e6dd96885d326be891b8b48520787177d8540d5f3e2758cb8c5" - }, - { - "file": "ui/storybook/stories/onboarding/resume-draft.stories.tsx", - "capabilities": [ - "onboarding/resume" - ], - "purpose": "Getting started and access/Onboarding and first work/Resume a saved draft", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "OnboardingWizard restores a seeded draft, malformed/unavailable-company handling and draft retention across a fixture remount. The reopen button belongs to the fixture host; real reload, account switch and storage failure remain separate checks. The merged wizard includes Codex harness/runner draft restoration and immutable-environment setup qualification. These isolated draft states do not establish the new native setup, task/follow-up, account or cleanup journey. The authorized draft reload and explicit company-opening boundaries were reviewed at the fixed wizard source; component controls do not establish a successful managed reload or first task.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/onboarding.md", - "ui/src/api/companies-query.ts", - "ui/src/components/OnboardingWizard.tsx", - "ui/src/components/ui/button.tsx", - "ui/src/context/DialogContext.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/onboardingDraft.ts", - "ui/storybook/stories/onboarding/resume-draft.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-onboarding-resume", - "sidebarTitle": "Getting started and access/Onboarding and first work/Resume a saved draft", - "fingerprint": "5dcf40da0836bb9ea5625095b839a3c9b4c2636bcaf6ebde41055e2b6983ba99" - }, - { - "file": "ui/storybook/stories/routines/run-now.stories.tsx", - "capabilities": [ - "routines/run-now" - ], - "purpose": "Automation and structured work/Routines, schedules, and triggers/Run now", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "RoutineDetail manual-run dialog with required input, captured variables, pending/error/success and read states. Fictional dispatch receipt; real scheduling, coalescing, workspace authority and execution remain separate.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/routines.md", - "ui/src/components/ToastViewport.tsx", - "ui/src/lib/router.tsx", - "ui/src/pages/RoutineDetail.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/fixtures/routineWebhooks.tsx", - "ui/storybook/stories/routines/run-now.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-routine-run-now", - "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Run now", - "fingerprint": "6d6f650f4990ad61045c6e3c47ae446cf5ac7a5240ca123a91c2c3216bf0d3c9" - }, - { - "file": "ui/storybook/stories/app-permissions/catalog-review.stories.tsx", - "capabilities": [ - "app-permissions/catalog-change" - ], - "purpose": "Apps, channels, and extensions/App access and action permissions/Review newly discovered actions", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Shipped ActionsSection quarantine reviewer with allowed/blocked decisions, empty/refreshing/saving/read-only props. Callbacks simulate catalog persistence; discovery failures belong to AppDetail and backend authority remains separate.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/app-permissions.md", - "ui/src/pages/apps/app-detail/PermissionsPanel.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/app-permissions/catalog-review.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-catalog-review", - "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Review newly discovered actions", - "fingerprint": "0b4c214f3c5e138fa57da3ed59a64c368d8ac7615476164743b810c117e7cab6" - }, - { - "file": "ui/storybook/stories/chat-channels/channel-attachments.stories.tsx", - "capabilities": [ - "chat-channels/attachments" - ], - "purpose": "Apps, channels, and extensions/External chat and email/Task-linked files", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "TaskChatBubble with received/outbound saved attachment receipts, no/multiple files and missing filename. File links are fictional; no download, provider transfer or authorization is proved.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/chat-channels.md", - "ui/src/components/task-chat/TaskChatBubble.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/chat-channels/channel-attachments.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-channel-attachments", - "sidebarTitle": "Apps, channels, and extensions/External chat and email/Task-linked files", - "fingerprint": "aa6718bf5754d2f5603682ed76d5075e277ce19f35b38356f92f8e3f14bc4f43" - }, - { - "file": "ui/storybook/stories/steering/composer-draft-recovery.stories.tsx", - "capabilities": [ - "steering/drafts" - ], - "purpose": "Tasks and conversations/Steering and queued messages/Draft recovery", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "TaskChatComposer uses owned task-keyed browser drafts, uncertain submission fence, switch/restore and failed/accepted send callbacks. API receipt authority and real submission durability remain separate. Storybook-owned draft keys are reset using the matching retained submission ID on setup and cleanup; same-browser uncertain-to-empty/send switching is covered separately.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/steering.md", - "ui/src/components/task-chat/TaskChatComposer.tsx", - "ui/src/components/ui/button.tsx", - "ui/src/lib/composer-draft.ts", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/steering/composer-draft-recovery.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-composer-draft-recovery", - "sidebarTitle": "Tasks and conversations/Steering and queued messages/Draft recovery", - "fingerprint": "1c242e44746a80add5d9d54ea46611fe58ec43aac42e9d8c61027495c7fa4279" - }, - { - "file": "ui/storybook/stories/inbox-search/personal-task-toasts.stories.tsx", - "capabilities": [ - "inbox-search/toasts" - ], - "purpose": "Tasks and conversations/Inbox, decisions, and search/Personal task notifications", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "LiveUpdatesProvider and ToastViewport consume fixture socket eligibility, suppress unrelated/visible-task events and deduplicate replay. Server eligibility metadata is simulated; no persisted multiplayer participation proof. The upstream Inbox recipe adds agent-created-task discovery checks; this LiveUpdatesProvider suite still tests toast eligibility only.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/inbox-search.md", - "ui/src/components/ToastViewport.tsx", - "ui/src/components/ui/button.tsx", - "ui/src/context/LiveUpdatesProvider.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/inbox-search/personal-task-toasts.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/live-events.ts" - ], - "stableId": "feature-personal-task-toasts", - "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Personal task notifications", - "fingerprint": "956b02e1631234b0eaba5622e416edec931a8151a2f6c4f069cdefee3c51a428" - }, - { - "file": "ui/storybook/stories/agent-chat/conference-room.stories.tsx", - "capabilities": [ - "agent-chat/conference-room" - ], - "purpose": "Tasks and conversations/Agent conversations and project handoff/Conference Room", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "BoardChat empty, reply, send pending/error/403 through fixture SSE and persisted comment reads. 403 uses the shipped generic unavailable message; route gates and real Claude execution remain separate.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/agent-chat.md", - "ui/src/pages/BoardChat.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/agent-chat/conference-room.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-conference-room", - "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Conference Room", - "fingerprint": "2c2431d14a8e6106a6ede10021ea387b7b5e8a9770710f423cbe95ba316dc4da" - }, - { - "file": "ui/storybook/stories/documents-artifacts/document-revisions.stories.tsx", - "capabilities": [ - "documents-artifacts/documents" - ], - "purpose": "Tasks and conversations/Documents, attachments, and work products/Document revisions", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "IssueDocumentsSection renders current/edit/historical preview and append-only restore with mutation error. Read/loading failures retain shipped fallback rendering; no persisted concurrency or authorization proof.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/documents-artifacts.md", - "ui/src/components/DocumentFrameHeader.tsx", - "ui/src/components/IssueDocumentsSection.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/documents-artifacts/document-revisions.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-document-revisions", - "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Document revisions", - "fingerprint": "a1d9e6b7f17a5d75ac2ff91a0ad96b9de9dadab4b2e0340ac7ae94d32809409b" - }, - { - "file": "ui/storybook/stories/navigation-preferences/sidebar-preferences.stories.tsx", - "capabilities": [ - "navigation-preferences/preferences" - ], - "purpose": "Oversight and operation/Navigation, profile, and announcements/Sidebar preferences", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production Sidebar inside PluginLauncherProvider with saved-order reads, pending/error/403 fallback and session-only section collapse. Favorites, recents and actual order persistence still need the recipe checks.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/navigation-preferences.md", - "ui/src/components/Sidebar.tsx", - "ui/src/components/SidebarSection.tsx", - "ui/src/plugins/launchers.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/navigation-preferences/sidebar-preferences.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts" - ], - "stableId": "feature-sidebar-preferences", - "sidebarTitle": "Oversight and operation/Navigation, profile, and announcements/Sidebar preferences", - "fingerprint": "5426596737a1f27105954d0e7fde6729f0b3a2e83ba7dec9e288286a359ab216" - }, - { - "file": "ui/storybook/stories/pipelines/pipeline-board.stories.tsx", - "capabilities": [ - "pipelines/items" - ], - "purpose": "Automation and structured work/Pipelines, review queues, and learnings/Items", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production Pipelines board with stages/items and loading/empty/error/403. Snapshot rows only; transitions, liveness, guards and automation execution remain separate.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/pipelines.md", - "ui/src/lib/router.tsx", - "ui/src/pages/Pipelines.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/pipelines/pipeline-board.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/pipelines.ts" - ], - "stableId": "feature-pipeline-board", - "sidebarTitle": "Automation and structured work/Pipelines, review queues, and learnings/Items", - "fingerprint": "6259bfc636e56d936fa77164bd5acbc5967066721a37f75bc803f5a4db6b3be3" - }, - { - "file": "ui/storybook/stories/pipelines/stage-settings.stories.tsx", - "capabilities": [ - "pipelines/stages" - ], - "purpose": "Automation and structured work/Pipelines, review queues, and learnings/Stage settings", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production PipelineSettings stage editor with filled configuration, no stages, pending/error/403. This pass renders the shipped controls; saved stage/automation changes remain production obligations.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/pipelines.md", - "ui/src/lib/router.tsx", - "ui/src/pages/PipelineSettings.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/pipelines/stage-settings.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/pipelines.ts" - ], - "stableId": "feature-pipeline-stages", - "sidebarTitle": "Automation and structured work/Pipelines, review queues, and learnings/Stage settings", - "fingerprint": "747e8cf58dd88118466de6b4ba8967f2f76ed31f7a8ee300f05265630367f0aa" - }, - { - "file": "ui/storybook/stories/pipelines/review-queue.stories.tsx", - "capabilities": [ - "pipelines/review" - ], - "purpose": "Automation and structured work/Pipelines, review queues, and learnings/Review queue", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production ReviewQueue with empty/loading/error/403, approval removal and failure recovery marked Needs attention. Fixture decisions do not prove real review leases, version checks or transitions.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/pipelines.md", - "ui/src/lib/router.tsx", - "ui/src/pages/Pipelines.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/pipelines/review-queue.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/pipelines.ts" - ], - "stableId": "feature-pipeline-review", - "sidebarTitle": "Automation and structured work/Pipelines, review queues, and learnings/Review queue", - "fingerprint": "360dedf71d3540f1b67880ba49687a3b6a8962a11fdc8c3a2acd375c695a883c" - }, - { - "file": "ui/storybook/stories/pipelines/learnings.stories.tsx", - "capabilities": [ - "pipelines/learnings" - ], - "purpose": "Automation and structured work/Pipelines, review queues, and learnings/Learnings", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "Production Learnings feed renders a review_decided event plus loading/empty/error/403. Event provenance and durable audit records remain separate; this is not a new learning-record subsystem.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/pipelines.md", - "ui/src/lib/router.tsx", - "ui/src/pages/Pipelines.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/pipelines/learnings.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/pipelines.ts" - ], - "stableId": "feature-pipeline-learnings", - "sidebarTitle": "Automation and structured work/Pipelines, review queues, and learnings/Learnings", - "fingerprint": "acc796cc3ca32601e40809ffb0b5e1406c1360785c988d74baca3172cad71b49" - }, - { - "file": "ui/storybook/stories/execution-environments/environment-states.stories.tsx", - "capabilities": [ - "execution-environments/configuration", - "execution-environments/capabilities", - "execution-environments/probe" - ], - "purpose": "Projects and execution/Execution environments/Configuration, capabilities, and probes", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "CompanyEnvironments configuration/edit, unsupported capabilities and probe pending/failure/success. No provider contacted. List read/loading failures expose shipped fallback behavior, not dedicated error UI.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/execution-environments.md", - "ui/src/components/ToastViewport.tsx", - "ui/src/lib/router.tsx", - "ui/src/pages/CompanyEnvironments.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/execution-environments/environment-states.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/environments.ts" - ], - "stableId": "feature-execution-environments", - "sidebarTitle": "Projects and execution/Execution environments/Configuration, capabilities, and probes", - "fingerprint": "9a14e48be15b72210745d53541505a92e331437b67369d42d6364e78938b5120" - }, - { - "file": "ui/storybook/stories/execution-environments/custom-images.stories.tsx", - "capabilities": [ - "execution-environments/images" - ], - "purpose": "Projects and execution/Execution environments/Custom images", - "status": "current", - "implementation": "production", - "boundary": "fixtures", - "notes": "CompanyEnvironments image metadata: unconfigured, captured, unsupported, failed, loading and 403. No live setup terminal, provider capture, rollback or relink is executed.", - "reviewedAt": "2026-10-13", - "sources": [ - "maps/feature-map/execution-environments.md", - "ui/src/components/ToastViewport.tsx", - "ui/src/lib/router.tsx", - "ui/src/pages/CompanyEnvironments.tsx", - "ui/storybook/.storybook/preview.tsx", - "ui/storybook/stories/execution-environments/custom-images.stories.tsx", - "ui/storybook/support/capability-gaps/api.ts", - "ui/storybook/support/capability-gaps/environments.ts" - ], - "stableId": "feature-environment-images", - "sidebarTitle": "Projects and execution/Execution environments/Custom images", - "fingerprint": "0877c994c37d7272b9a1330897cf56d366162dc17e7503c753415dd1077c9446" - } - ] -} diff --git a/scripts/check-maps.mjs b/scripts/check-maps.mjs index 9aef27c5d32..a1b2ad05bd1 100644 --- a/scripts/check-maps.mjs +++ b/scripts/check-maps.mjs @@ -2,6 +2,7 @@ import { existsSync, readFileSync, readdirSync } from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import { featureIndex } from "./feature-map.mjs"; const scriptPath = fileURLToPath(import.meta.url); const defaultRoot = path.resolve(path.dirname(scriptPath), ".."); @@ -83,7 +84,8 @@ export function checkMaps(repoRoot = defaultRoot) { const productFiles = files(featureRoot); const agentFiles = files(agentRoot); - const indexes = [read(path.join(featureRoot, "README.md")), read(path.join(agentRoot, "README.md"))]; + try { featureIndex(repoRoot); } + catch (error) { errors.push(error.message); } let capabilities = 0; for (const name of new Set([...productFiles, ...agentFiles])) { const productFile = path.join(featureRoot, name); @@ -109,12 +111,6 @@ export function checkMaps(repoRoot = defaultRoot) { } if (!agent.includes(`](../feature-map/${name})`)) fail(agentFile, "missing matching product link"); if (!product.includes(`](../agent-access-map/${name})`)) fail(productFile, "missing matching companion link"); - for (const [index, text] of indexes.entries()) { - if (!new RegExp(`\\]\\((?:\\./)?${name.replaceAll(".", "\\.")}\\)`).test(text)) { - fail(path.join(index === 0 ? featureRoot : agentRoot, "README.md"), `missing area: ${name}`); - } - } - if (!/^Review date: \d{4}-\d{2}-\d{2}\. Source commit: `[a-f\d]{40}`\./m.test(agent)) fail(agentFile, "missing review date/source commit"); links(productFile, product); links(agentFile, agent); capabilities += ids.length; diff --git a/scripts/check-maps.test.mjs b/scripts/check-maps.test.mjs index aae6e43aff8..1af8e6775a1 100644 --- a/scripts/check-maps.test.mjs +++ b/scripts/check-maps.test.mjs @@ -21,7 +21,7 @@ function fixture(t) { const agent = path.join(root, "maps/agent-access-map/example.md"); writeFileSync(path.join(root, "maps/README.md"), "# Contract\n"); for (const dir of ["feature-map", "agent-access-map"]) writeFileSync(path.join(root, "maps", dir, "README.md"), "[Example](example.md)\n"); - writeFileSync(product, "# Example\n\n[Agent access](../agent-access-map/example.md)\n\n## Sub-features\n\n- `create`: create a record.\n\n## How to get to it (user POV)\n"); + writeFileSync(product, '---\nnavigation: {"section":"Work","sectionOrder":10,"order":10}\n---\n# Example\n\nExample workflows.\n\n[Agent access](../agent-access-map/example.md)\n\n## Sub-features\n\n- `create`: create a record.\n\n## How to get to it (user POV)\n'); writeFileSync(agent, `# Agent access\n\nProduct map: [Example](../feature-map/example.md).\n\nReview date: 2026-10-12. Source commit: \`${"a".repeat(40)}\`.\n\n## \`create\`\n\nReview: \`baseline\`.\n\n${record}`); return { root, product, agent }; } diff --git a/scripts/feature-map.mjs b/scripts/feature-map.mjs new file mode 100644 index 00000000000..ec6b485c813 --- /dev/null +++ b/scripts/feature-map.mjs @@ -0,0 +1,98 @@ +import { existsSync, readFileSync, readdirSync } from "node:fs"; +import path from "node:path"; + +export const sidebarLabel = title => title.replaceAll("/", ", "); + +export function featureIndex(root) { + const directory = path.join(root, "maps/feature-map"); + const sections = new Map(); + for (const file of readdirSync(directory).filter(file => file.endsWith(".md") && file !== "README.md").sort()) { + const id = file.slice(0, -3); + const source = readFileSync(path.join(directory, file), "utf8"); + const frontmatter = source.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/); + const navigationLine = frontmatter?.[1].match(/^navigation: (.+)$/m)?.[1]; + if (!navigationLine) throw new Error(`${file}: missing navigation metadata`); + const navigation = JSON.parse(navigationLine); + if (typeof navigation.section !== "string" || !navigation.section.trim() + || !Number.isFinite(navigation.sectionOrder) || !Number.isFinite(navigation.order)) { + throw new Error(`${file}: invalid navigation metadata`); + } + const text = source.slice(frontmatter[0].length); + const title = text.match(/^# (.+)$/m)?.[1]; + const description = text.split(/^# .+\r?\n/m)[1]?.trim().split(/\r?\n\s*\r?\n/)[0].replaceAll(/\r?\n/g, " "); + if (!title || !description) throw new Error(`${file}: missing title or description`); + const body = text.split(/^## Sub-features\s*$/m)[1]?.split(/^## /m)[0]; + if (!body) throw new Error(`${file}: missing sub-features`); + const capabilities = []; + for (const row of body.trim().split(/\r?\n/)) { + const match = row.match(/^- `([^`]+)`:\s*(.*)$/); + if (match) { + const [, key, description] = match; + capabilities.push({ id: `${id}/${key}`, label: key.replaceAll("-", " ").replace(/^./, letter => letter.toUpperCase()), description }); + } else if (row.trim() && capabilities.length) capabilities.at(-1).description += ` ${row.trim()}`; + } + if (!capabilities.length || capabilities.some(capability => !/^[a-z0-9-]+\/[a-z0-9-]+$/.test(capability.id)) + || new Set(capabilities.map(capability => capability.id)).size !== capabilities.length) { + throw new Error(`${file}: invalid or duplicate capability IDs`); + } + const verification = text.split(/^### Storybook verification\s*$/m)[1]?.split(/^### /m)[0] ?? ""; + const seen = new Set(); + for (const entry of verification.split(/^#### /m).slice(1)) { + const key = entry.match(/^`([^`]+)`/)?.[1]; + const capability = capabilities.find(capability => capability.id === `${id}/${key}`); + if (!capability || seen.has(key)) throw new Error(`${file}: unknown or duplicate verification capability ${key}`); + seen.add(key); + const fields = Object.fromEntries(["Scope", "Storybook", "Production", "Sources"].map(field => [field.toLowerCase(), entry.match(new RegExp(`^${field}: (.+)$`, "m"))?.[1]])); + if (!["ui", "cli", "browser"].includes(fields.scope) || Object.values(fields).some(value => !value?.trim())) { + throw new Error(`${file}: incomplete verification route for ${key}`); + } + capability.verification = fields; + } + let section = sections.get(navigation.section); + if (!section) { + section = { title: navigation.section, order: navigation.sectionOrder, features: [] }; + sections.set(section.title, section); + } + if (section.order !== navigation.sectionOrder) throw new Error(`${file}: inconsistent section order for ${section.title}`); + section.features.push({ id, title, description, capabilities, order: navigation.order }); + } + if (!sections.size) throw new Error("Feature map has no feature families"); + const ordered = [...sections.values()].sort((a, b) => a.order - b.order || a.title.localeCompare(b.title)); + return { sections: ordered.map(({ title, features }) => ({ title, features: features.sort((a, b) => a.order - b.order || a.id.localeCompare(b.id)).map(({ order, ...feature }) => feature) })) }; +} + +export function mapIndexes(index) { + const features = ["# Product features", "", "Generated from the feature recipes. Edit the affected recipe, not this index.", ""]; + const access = ["# Agent access by feature", "", "Generated from the feature recipes and their access companions. Counts are documentation scope, not passing tests.", ""]; + for (const section of index.sections) { + for (const lines of [features, access]) lines.push(`## ${section.title}`, ""); + for (const feature of section.features) { + features.push(`- [${feature.title}](../feature-map/${feature.id}.md): ${feature.description}`); + access.push(`- [${feature.title}](../agent-access-map/${feature.id}.md) · [Product recipe](../feature-map/${feature.id}.md) · ${feature.capabilities.length} capabilities`); + } + for (const lines of [features, access]) lines.push(""); + } + return new Map([["maps/generated/feature-map.md", features.join("\n")], ["maps/generated/agent-access-map.md", access.join("\n")]]); +} + +export function pageInventory(root, index) { + const references = new Map(); + for (const feature of index.sections.flatMap(section => section.features)) { + const recipe = `maps/feature-map/${feature.id}.md`; + for (const match of readFileSync(path.join(root, recipe), "utf8").matchAll(/\]\(([^)\n]+)\)/g)) { + const target = path.resolve(root, path.dirname(recipe), match[1].split("#")[0]); + if (!references.has(target)) references.set(target, new Set()); + references.get(target).add(feature.id); + } + } + function pages(directory) { + if (!existsSync(directory)) return []; + return readdirSync(directory, { withFileTypes: true }).flatMap(entry => { + const file = path.join(directory, entry.name); + if (entry.isDirectory()) return pages(file); + if (!entry.name.endsWith(".tsx") || /\.(test|spec|stories)\.tsx$/.test(entry.name)) return []; + return [{ file: path.relative(root, file).split(path.sep).join("/"), features: [...(references.get(file) ?? [])].sort() }]; + }); + } + return { pages: pages(path.join(root, "ui/src/pages")).sort((a, b) => a.file.localeCompare(b.file)) }; +} diff --git a/scripts/map-test-fixture.mjs b/scripts/map-test-fixture.mjs new file mode 100644 index 00000000000..6052b35f97f --- /dev/null +++ b/scripts/map-test-fixture.mjs @@ -0,0 +1,34 @@ +import { mkdtempSync, mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +export function mapFixture(t) { + const root = mkdtempSync(path.join(os.tmpdir(), "paperclip-map-test-")); + t.after(() => rmSync(root, { recursive: true, force: true })); + function write(file, content) { + mkdirSync(path.dirname(path.join(root, file)), { recursive: true }); + writeFileSync(path.join(root, file), content); + } + write("ui/package.json", '{"type":"module"}\n'); + symlinkSync(fileURLToPath(new URL("../ui/node_modules", import.meta.url)), path.join(root, "ui/node_modules"), "junction"); + write(".gitignore", "node_modules/\nmaps/generated/\nui/storybook/generated/\nui/storybook/.storybook/preview.tsx\n"); + write("maps/README.md", "# Maps\n"); + write("maps/feature-map/README.md", "# Feature recipes\n"); + write("maps/agent-access-map/README.md", "# Access contracts\n"); + write("ui/storybook/.storybook/preview-base.tsx", "export default { parameters: { layout: 'fullscreen' } };\n"); + function feature(id, title, capabilities = ["create"], options = {}) { + const { section = "Work", sectionOrder = 10, order = 10 } = options; + write(`maps/feature-map/${id}.md`, `---\nnavigation: ${JSON.stringify({ section, sectionOrder, order })}\n---\n\n# ${title}\n\n${title} workflows.\n\n[Agent access](../agent-access-map/${id}.md)\n\n## Sub-features\n\n${capabilities.map(key => `- \`${key}\`: ${key} work.`).join("\n")}\n\n## Gotchas\n`); + write(`maps/agent-access-map/${id}.md`, `# ${title} access\n\n[Product map](../feature-map/${id}.md)\n\n${capabilities.map(key => `## \`${key}\`\n\nReview: \`baseline\`.\n\nAPI: \`present\` — POST /api/${id}.\nAgent access: \`available\` — REST.\nPolicy: same company.\nEvidence: \`source-only\` — inspect implementation.\nVerification: \`not-run\` — assert access and denial.\nGaps: remaining variants.\n`).join("\n")}`); + } + function story(name = "task", metadata = { capabilities: ["tasks/create"], implementation: "production", boundary: "fixtures" }, options = {}) { + const { area = "tasks", title = `Work/Tasks/${name}`, id = `stable-${name}`, exports = "export const Empty = {};", parameters = "" } = options; + const file = `ui/storybook/stories/${area}/${name}.stories.tsx`; + write(file, `import type { Meta } from '@storybook/react-vite';\nconst meta = { id: ${JSON.stringify(id)}, title: ${JSON.stringify(title)}, parameters: { ${parameters} paperclip: ${JSON.stringify(metadata)} } } satisfies Meta;\nexport default meta;\n${exports}\n`); + return file; + } + feature("tasks", "Tasks", ["create", "discussion"]); + const file = story(); + return { root, write, feature, story, file }; +} diff --git a/scripts/storybook-catalog.d.mts b/scripts/storybook-catalog.d.mts new file mode 100644 index 00000000000..422c75bfbad --- /dev/null +++ b/scripts/storybook-catalog.d.mts @@ -0,0 +1,6 @@ +export type StorySource = { file: string; title: string; metaId: string; ids: string[]; plays: number }; +export function generateStorybook(root?: string, options?: { write?: boolean }): { + catalog: { version: number; entries: Array<{ file: string; stableId: string }> }; + stories: StorySource[]; +}; +export function scanStories(root?: string): StorySource[]; diff --git a/scripts/storybook-catalog.mjs b/scripts/storybook-catalog.mjs index 43c50bcba81..618fb89389d 100644 --- a/scripts/storybook-catalog.mjs +++ b/scripts/storybook-catalog.mjs @@ -1,19 +1,19 @@ #!/usr/bin/env node -import { createHash } from "node:crypto"; -import { existsSync, readFileSync, readdirSync, writeFileSync } from "node:fs"; +import { readFileSync, readdirSync } from "node:fs"; import { createRequire } from "node:module"; import path from "node:path"; import { fileURLToPath } from "node:url"; -import { featureIndex, reconcileFeatureArtifacts, sidebarLabel } from "./storybook-feature-index.mjs"; +import { featureIndex, sidebarLabel } from "./feature-map.mjs"; +import { generateFeatureArtifacts, generatedRoot, writeArtifacts } from "./storybook-feature-index.mjs"; +import { checkMaps } from "./check-maps.mjs"; 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"]; +const implementations = ["production", "prototype", "mixed", "guide", "unreviewed"]; +const boundaries = ["fixtures", "fixture-server", "static", "unreviewed"]; +const annotationFields = new Set(["capabilities", "status", "implementation", "boundary", "notes", "home", "exception", "replacement"]); function files(root, dir) { return readdirSync(path.join(root, dir), { withFileTypes: true }).flatMap(entry => { @@ -22,27 +22,39 @@ function files(root, dir) { }).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"); +function literal(node, label) { + if (!node) throw new Error(`${label}: expected literal metadata`); + if (["TSAsExpression", "TSSatisfiesExpression"].includes(node.type)) return literal(node.expression, label); + if (["StringLiteral", "BooleanLiteral", "NumericLiteral"].includes(node.type)) return node.value; + if (node.type === "ArrayExpression") return node.elements.map(element => literal(element, label)); + if (node.type === "ObjectExpression") { + const result = {}; + for (const property of node.properties) { + const key = property.key?.name ?? property.key?.value; + if (property.type !== "ObjectProperty" || property.computed || typeof key !== "string" || Object.hasOwn(result, key) || key === "__proto__") { + throw new Error(`${label}: metadata must use unique literal properties`); + } + result[key] = literal(property.value, label); + } + return result; } - return hash.digest("hex"); + throw new Error(`${label}: metadata must be literal; expressions are not executed`); } -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); +function annotation(csf, file) { + const parameters = csf._metaAnnotations.parameters; + if (parameters?.type !== "ObjectExpression") throw new Error(`${file}: declare parameters.paperclip as literal metadata`); + const matches = parameters.properties.filter(property => (property.key?.name ?? property.key?.value) === "paperclip"); + if (matches.length !== 1) throw new Error(`${file}: expected one parameters.paperclip annotation`); + const property = matches[0]; + if (property.type !== "ObjectProperty" || property.computed) throw new Error(`${file}: paperclip must be a literal property`); + if (parameters.properties.slice(parameters.properties.indexOf(property) + 1).some(property => property.type === "SpreadElement" || property.computed)) { + throw new Error(`${file}: paperclip metadata must follow parameter spreads and computed properties`); } - return result; -} - -export function featureNavigation(root) { - return new Map(featureIndex(root).sections.flatMap(section => section.features.map(feature => [feature.id, `${sidebarLabel(section.title)}/${sidebarLabel(feature.title)}`]))); + const value = literal(property.value, file); + if (!value || Array.isArray(value) || typeof value !== "object") throw new Error(`${file}: paperclip metadata must be an object`); + for (const key of Object.keys(value)) if (!annotationFields.has(key)) throw new Error(`${file}: unknown paperclip field ${key}`); + return value; } export function scanStories(root = defaultRoot) { @@ -50,60 +62,53 @@ export function scanStories(root = defaultRoot) { 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, metaId: csf.meta.id, ids: csf.stories.map(story => story.id), plays: csf.stories.filter(story => story.__stats?.play).length }; + return { file, title: csf.meta.title, metaId: csf.meta.id, ids: csf.stories.map(story => story.id), plays: csf.stories.filter(story => story.__stats?.play).length, annotation: annotation(csf, file) }; }); } -function storyHome(entry) { - return entry.home ?? entry.capabilities[0]?.split("/")[0] ?? (entry.implementation === "guide" ? "overview" : "foundations"); +export function storyHome(entry) { + return entry.home ?? (typeof entry.capabilities?.[0] === "string" ? entry.capabilities[0].split("/")[0] : undefined) ?? (entry.implementation === "guide" ? "overview" : "foundations"); } -export function validateCatalog(root, catalog, stories) { +export function catalogFromStories(stories, index) { + const navigation = new Map(index.sections.flatMap(section => section.features.map(feature => [feature.id, `${sidebarLabel(section.title)}/${sidebarLabel(feature.title)}`]))); + return { version: 2, entries: stories.map(story => { + const entry = { status: "unreviewed", implementation: "unreviewed", boundary: "unreviewed", notes: "", ...story.annotation, file: story.file, stableId: story.metaId, sidebarTitle: story.title }; + const prefix = navigation.get(storyHome(entry)) ?? ({ overview: "Overview", foundations: "Foundations" })[storyHome(entry)]; + return { ...entry, purpose: story.title?.startsWith(`${prefix}/`) ? story.title.slice(prefix.length + 1) : story.title }; + }) }; +} + +export function validateCatalog(catalog, stories, index) { const errors = []; - const refs = capabilities(root); - const navigation = featureNavigation(root); + const refs = new Set(index.sections.flatMap(section => section.features.flatMap(feature => feature.capabilities.map(capability => capability.id)))); + const navigation = new Map(index.sections.flatMap(section => section.features.map(feature => [feature.id, `${sidebarLabel(section.title)}/${sidebarLabel(feature.title)}`]))); 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; } + if (typeof entry.notes !== "string") errors.push(`${label}: notes must be text`); + if (!Array.isArray(entry.capabilities) || entry.capabilities.some(ref => typeof ref !== "string")) { errors.push(`${label}: capabilities must be an array of IDs`); continue; } if (entry.home !== undefined && entry.home !== "foundations") errors.push(`${label}: only shared foundations may override the capability home`); - if (entry.home === "foundations" && !entry.exception?.trim()) errors.push(`${label}: foundation home needs an explicit reason`); + if (entry.exception !== undefined && (typeof entry.exception !== "string" || !entry.exception.trim())) errors.push(`${label}: exception must be nonempty text`); + if (entry.home === "foundations" && !entry.exception) errors.push(`${label}: foundation home needs an explicit reason`); 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 && !entry.exception) errors.push(`${label}: unmapped story needs an explicit reason`); if (entry.capabilities.length !== new Set(entry.capabilities).size) errors.push(`${label}: duplicate capability references`); const area = storyHome(entry); const prefix = navigation.get(area) ?? ({ overview: "Overview", foundations: "Foundations" })[area]; - const story = byFile.get(label); if (!label.startsWith(`${storyRoot}/${area}/`)) errors.push(`${label}: story must live in its primary feature folder ${area}`); - if (!prefix || !entry.sidebarTitle?.startsWith(`${prefix}/`) || story?.title !== entry.sidebarTitle) errors.push(`${label}: sidebar title must match its feature-map home`); - if (!entry.stableId || story?.metaId !== entry.stableId) errors.push(`${label}: explicit meta ID must preserve the catalog stableId`); - if (entry.replacement && !byFile.has(entry.replacement)) errors.push(`${label}: replacement story is missing`); - if (!entry.sources?.includes(label)) errors.push(`${label}: review must include its story source`); - review(label, entry.sources, entry.fingerprint); + if (!prefix || typeof entry.sidebarTitle !== "string" || !entry.sidebarTitle.startsWith(`${prefix}/`)) errors.push(`${label}: sidebar title must match its feature-map home`); + if (typeof entry.stableId !== "string" || !entry.stableId.trim()) errors.push(`${label}: explicit meta ID is required`); + if (entry.replacement !== undefined && !byFile.has(entry.replacement)) errors.push(`${label}: replacement story is missing`); } - 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), ...featureIndex(root).sections.flatMap(section => section.features.map(feature => `feature-map-${feature.id}--overview`))]; - if (ids.length !== new Set(ids).size) errors.push("Duplicate story IDs"); + const metaIds = stories.map(story => story.metaId); + const ids = [...stories.flatMap(story => story.ids), ...index.sections.flatMap(section => section.features.map(feature => `feature-map-${feature.id}--overview`))]; + if (metaIds.length !== new Set(metaIds).size || 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, index) { @@ -115,10 +120,10 @@ export function renderIndex(catalog, stories, index) { 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)", "", + const lines = ["# Storybook by feature", "", "Generated from story annotations and feature recipes. Do not edit this file.", "", + "[Contract and maintenance](../storybook-map/README.md) · [Verification routes](verification.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.", ""]; + "Status describes product alignment; implementation describes the rendered subject; boundary describes simulated data. Limitations are authored alongside each story. Classification is not executed evidence. Related capabilities cross-list one canonical story file.", ""]; const homes = index.sections.flatMap(section => section.features.map(feature => ({ ...feature, section: section.title }))); homes.push({ id: "foundations-and-guides", title: "Shared foundations and guides", section: "Foundations", description: "Shared components and contributor guidance outside the product feature index." }); let currentSection; @@ -148,24 +153,47 @@ export function renderIndex(catalog, stories, index) { return lines.join("\n") + "\n"; } -export function reconcileCatalog(root, catalog, stories, write = false) { - const index = featureIndex(root); - const errors = reconcileFeatureArtifacts(root, index, write); - errors.push(...validateCatalog(root, catalog, stories)); - if (!errors.length) { - const generated = renderIndex(catalog, stories, index); - if (write) writeFileSync(path.join(root, indexPath), generated); - else if (!existsSync(path.join(root, indexPath)) || readFileSync(path.join(root, indexPath), "utf8") !== generated) errors.push("Generated INDEX.md is stale; run with --write after reviewing catalog changes"); +export function renderVerification(catalog, index) { + const examples = catalog.entries.filter(entry => entry.implementation !== "guide" && !["historical", "proposed"].includes(entry.status)); + const capabilities = index.sections.flatMap(section => section.features.flatMap(feature => feature.capabilities)); + const missing = capabilities.filter(capability => !examples.some(entry => entry.capabilities.includes(capability.id))); + const lines = ["# Storybook verification routes", "", "Generated from story annotations and feature recipes. Associations are navigation, not proof of passing tests.", "", + `${capabilities.length} capabilities; ${missing.length} without a current, mixed or unreviewed example. Historical examples, proposals and guides do not remove gaps.`, "", + "## Capabilities without examples", ""]; + for (const capability of missing) { + const area = capability.id.split("/")[0]; + lines.push(`- [${capability.id}](../feature-map/${area}.md): ${capability.verification?.storybook ?? "No example associated. Inspect the feature recipe to select verification."}`); } - return errors; + lines.push("", "## Authored verification guidance", ""); + for (const capability of capabilities.filter(capability => capability.verification)) { + const route = capability.verification; + lines.push(`### ${capability.id}`, "", `Scope: ${route.scope}`, "", `Storybook: ${route.storybook}`, "", `Production: ${route.production}`, "", `Sources: ${route.sources}`, ""); + } + return lines.join("\n"); +} + +export function generateStorybook(root = defaultRoot, { write = true } = {}) { + const mapErrors = checkMaps(root).errors; + if (mapErrors.length) throw new Error(mapErrors.join("\n")); + const index = featureIndex(root); + const stories = scanStories(root); + const catalog = catalogFromStories(stories, index); + const errors = validateCatalog(catalog, stories, index); + if (errors.length) throw new Error(errors.join("\n")); + if (write) { + generateFeatureArtifacts(root, index); + writeArtifacts(root, new Map([ + [`${generatedRoot}/catalog.json`, JSON.stringify(catalog, null, 2) + "\n"], + ["maps/generated/storybook.md", renderIndex(catalog, stories, index)], + ["maps/generated/verification.md", renderVerification(catalog, index)], + ])); + } + return { catalog, stories, index }; } 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 = reconcileCatalog(defaultRoot, catalog, stories, args.includes("--write")); - 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.`); + if (args.some(arg => !["--write", "--check"].includes(arg)) || args.length > 1) throw new Error("Usage: node scripts/storybook-catalog.mjs [--write | --check]"); + const { stories } = generateStorybook(defaultRoot, { write: !args.includes("--check") }); + console.log(`Storybook map: ${stories.length} files, ${stories.reduce((n, story) => n + story.ids.length, 0)} stories. Structure only; no runtime proof.`); } diff --git a/scripts/storybook-catalog.test.mjs b/scripts/storybook-catalog.test.mjs index 9c41a069ec4..c638759745f 100644 --- a/scripts/storybook-catalog.test.mjs +++ b/scripts/storybook-catalog.test.mjs @@ -1,208 +1,163 @@ import assert from "node:assert/strict"; -import { mkdtempSync, mkdirSync, writeFileSync, rmSync, symlinkSync } from "node:fs"; -import os from "node:os"; +import { execFileSync } from "node:child_process"; +import { existsSync, readFileSync, rmSync } from "node:fs"; import path from "node:path"; import { test } from "node:test"; -import { fileURLToPath } from "node:url"; -import { fingerprint, reconcileCatalog, renderIndex, scanStories, validateCatalog } from "./storybook-catalog.mjs"; -import { featureIndex, reconcileFeatureArtifacts } from "./storybook-feature-index.mjs"; +import { catalogFromStories, generateStorybook, renderVerification, scanStories, validateCatalog } from "./storybook-catalog.mjs"; +import { featureIndex } from "./feature-map.mjs"; +import { mapFixture } from "./map-test-fixture.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/README.md", "# Features\n\n### Tasks and conversations\n\n| [Tasks](./tasks.md) | Tasks |\n"); - write("maps/feature-map/tasks.md", "# Tasks\n\n## Sub-features\n\n- `create`: create\n- `discussion`: discuss\n\n## How to get to it\n"); - write("ui/storybook/.storybook/preview.tsx", "// shared fixtures\n"); - const file = "ui/storybook/stories/tasks/task.stories.tsx"; - write(file, "// a story\n"); - write("ui/src/Task.tsx", "// production subject\n"); - const sharedSources = ["ui/storybook/.storybook/preview.tsx"]; - const sources = [file, "ui/src/Task.tsx"]; - const catalog = { - version: 1, sharedReview: { sources: sharedSources, fingerprint: fingerprint(root, sharedSources) }, - entries: [{ file, stableId: "tasks-create", sidebarTitle: "Tasks and conversations/Tasks/Create", capabilities: ["tasks/create", "tasks/discussion"], purpose: "Create a task", status: "current", - implementation: "production", boundary: "fixtures", notes: "Production subject; callbacks simulated.", - reviewedAt: "2026-10-12", sources, fingerprint: fingerprint(root, sources) }], - }; - const stories = [{ file, title: "Tasks and conversations/Tasks/Create", metaId: "tasks-create", ids: ["tasks-create--empty"], plays: 0 }]; - return { root, write, file, catalog, stories }; +function inspect(f) { + const index = featureIndex(f.root); + const stories = scanStories(f.root); + const catalog = catalogFromStories(stories, index); + return { catalog, stories, index, errors: validateCatalog(catalog, stories, index) }; } -test("complete inventory accepts production subjects with simulated data", t => { - const f = fixture(t); - assert.deepEqual(validateCatalog(f.root, f.catalog, f.stories), []); +test("source annotations assemble an inventory without a registry or review stamps", t => { + const f = mapFixture(t); + const result = inspect(f); + assert.deepEqual(result.errors, []); + assert.equal(result.catalog.entries[0].purpose, "task"); + assert.equal(result.catalog.entries[0].status, "unreviewed"); + assert.equal(result.catalog.entries[0].stableId, "stable-task"); + assert.equal(Object.hasOwn(result.catalog.entries[0], "fingerprint"), false); + assert.equal(Object.hasOwn(result.catalog.entries[0], "reviewedAt"), false); + f.story("new"); + assert.equal(inspect(f).catalog.entries.length, 2); + rmSync(path.join(f.root, f.file)); + assert.equal(inspect(f).catalog.entries.length, 1); }); -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("unknown capabilities, invalid annotations and inappropriate homes fail", t => { + const f = mapFixture(t); + f.story("task", { capabilities: ["tasks/missing"] }); + assert.match(inspect(f).errors.join("\n"), /unknown feature capability/); + f.story("task", { capabilities: [], status: "passed" }); + assert.match(inspect(f).errors.join("\n"), /invalid product status/); + assert.match(inspect(f).errors.join("\n"), /explicit reason/); + f.story("task", { capabilities: "tasks/create" }); + assert.match(inspect(f).errors.join("\n"), /array of IDs/); + f.story("task", { capabilities: ["tasks/create"] }, { title: "Other/Task" }); + assert.match(inspect(f).errors.join("\n"), /sidebar title/); }); -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"; - const file = "ui/storybook/stories/foundations/task.stories.tsx"; - f.write(file, "export default {};"); - const entry = f.catalog.entries[0]; - entry.file = file; - entry.sources = [file, "ui/src/Task.tsx"]; - entry.fingerprint = fingerprint(f.root, entry.sources); - entry.sidebarTitle = "Foundations/Task"; - f.stories[0].file = file; - f.stories[0].title = entry.sidebarTitle; - assert.deepEqual(validateCatalog(f.root, f.catalog, f.stories), []); +test("metadata is parsed without executing code or accepting obsolete bookkeeping fields", t => { + const f = mapFixture(t); + f.write(f.file, `export default { id: 'task', title: 'Work/Tasks/Test', parameters: { paperclip: (() => { throw new Error('executed'); })() } }; export const Empty = {};`); + assert.throws(() => scanStories(f.root), /expressions are not executed/); + f.story("task", { capabilities: ["tasks/create"], fingerprint: "old" }); + assert.throws(() => scanStories(f.root), /unknown paperclip field fingerprint/); + f.write(f.file, "export default { id: 'task', title: 'Work/Tasks/Test', parameters: { paperclip: { capabilities: [], capabilities: [] } } }; export const Empty = {};"); + assert.throws(() => scanStories(f.root), /unique literal properties/); }); -test("feature organization rejects wrong folders, sidebar homes and unstable meta IDs", t => { - const f = fixture(t); - f.catalog.entries[0].capabilities = ["tasks/discussion"]; - assert.deepEqual(validateCatalog(f.root, f.catalog, f.stories), []); - f.stories[0].metaId = "renamed-task"; - assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /explicit meta ID/); - f.stories[0].metaId = "tasks-create"; - f.stories[0].title = "Unrelated/Task"; - assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /sidebar title/); - f.stories[0].title = f.catalog.entries[0].sidebarTitle; - const originalFile = f.catalog.entries[0].file; - f.catalog.entries[0].file = "ui/storybook/stories/foundations/task.stories.tsx"; - assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /primary feature folder tasks/); - f.catalog.entries[0].file = originalFile; - f.write("maps/feature-map/README.md", "### Conversations\n| [Tasks](./tasks.md) | Tasks |\n"); - assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /sidebar title/); +test("parameter spreads cannot silently overwrite a source annotation", t => { + const f = mapFixture(t); + f.write(f.file, "export default { id: 'task', title: 'Work/Tasks/Test', parameters: { paperclip: { capabilities: [] }, ...other } }; export const Empty = {};"); + assert.throws(() => scanStories(f.root), /must follow parameter spreads/); + f.write(f.file, "export default { id: 'task', title: 'Work/Tasks/Test', parameters: { paperclip: { capabilities: [] }, [key]: other } }; export const Empty = {};"); + assert.throws(() => scanStories(f.root), /must follow parameter spreads/); + f.write(f.file, "export default { id: 'task', title: 'Work/Tasks/Test', parameters: { ['paperclip']: { capabilities: [] } } }; export const Empty = {};"); + assert.throws(() => scanStories(f.root), /must be a literal property/); }); -test("shared foundations cross-list capabilities without moving their canonical home or IDs", t => { - const f = fixture(t); - const entry = f.catalog.entries[0]; - const file = "ui/storybook/stories/foundations/task.stories.tsx"; - f.write(file, "// shared control example\n"); - entry.file = file; - entry.home = "foundations"; - entry.exception = "Shared control with related product examples."; - entry.sidebarTitle = "Foundations/Task"; - entry.sources = [file, "ui/src/Task.tsx"]; - entry.fingerprint = fingerprint(f.root, entry.sources); - f.stories[0] = { ...f.stories[0], file, title: entry.sidebarTitle }; - assert.deepEqual(validateCatalog(f.root, f.catalog, f.stories), []); - const index = renderIndex(f.catalog, f.stories, featureIndex(f.root)); - assert.match(index, /### Tasks[\s\S]*?No primary story suite/); - assert.match(index, /### Shared foundations and guides[\s\S]*?\[Foundations\/Task\]/); - assert.match(index, /`tasks\/create`: \[Foundations\/Task\]/); - assert.deepEqual(f.stories[0].ids, ["tasks-create--empty"]); - entry.home = "tasks"; - assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /only shared foundations/); - entry.home = "foundations"; - delete entry.exception; - assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /foundation home needs an explicit reason/); +test("foundations preserve home and cross-capability references", t => { + const f = mapFixture(t); + f.story("control", { capabilities: ["tasks/create"], home: "foundations", exception: "Shared control", implementation: "production" }, { area: "foundations", title: "Foundations/Control" }); + const { catalog, errors } = inspect(f); + assert.deepEqual(errors, []); + assert.equal(catalog.entries.find(entry => entry.stableId === "stable-control").home, "foundations"); + f.story("control", { capabilities: ["tasks/create"], home: "foundations" }, { area: "foundations", title: "Foundations/Control" }); + assert.match(inspect(f).errors.join("\n"), /foundation home needs an explicit reason/); }); -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("duplicate IDs, missing replacement references and collisions with generated guides fail", t => { + const f = mapFixture(t); + f.story("other", { capabilities: ["tasks/create"] }, { id: "stable-task" }); + assert.match(inspect(f).errors.join("\n"), /Duplicate story IDs/); + f.story("other", { capabilities: ["tasks/create"] }, { id: "feature-map-tasks", exports: "export const Overview = {};" }); + assert.match(inspect(f).errors.join("\n"), /Duplicate story IDs/); + f.story("other", { capabilities: ["tasks/create"], replacement: "missing.stories.tsx" }); + assert.match(inspect(f).errors.join("\n"), /replacement story is missing/); }); -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("recipe, component and shared fixture edits need no fingerprint acknowledgements", t => { + const f = mapFixture(t); + const before = inspect(f).catalog; + f.write("ui/src/Task.tsx", "export const Task = () => null;"); + f.write("ui/storybook/.storybook/preview-base.tsx", "export default { parameters: { changed: true } };"); + const file = "maps/feature-map/tasks.md"; + f.write(file, readFileSync(path.join(f.root, file), "utf8").replace("discussion work.", "Discuss revised behavior.")); + assert.deepEqual(inspect(f).catalog, before); + assert.deepEqual(inspect(f).errors, []); }); -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, featureIndex(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("check mode needs no generated outputs and generation leaves authored files intact", t => { + const f = mapFixture(t); + const before = readFileSync(path.join(f.root, f.file), "utf8"); + generateStorybook(f.root, { write: false }); + assert.equal(existsSync(path.join(f.root, "ui/storybook/generated")), false); + generateStorybook(f.root); + assert.ok(existsSync(path.join(f.root, "ui/storybook/generated/catalog.json"))); + assert.ok(existsSync(path.join(f.root, "maps/generated/verification.md"))); + assert.equal(readFileSync(path.join(f.root, f.file), "utf8"), before); + const first = readFileSync(path.join(f.root, "maps/generated/storybook.md"), "utf8"); + generateStorybook(f.root); + assert.equal(readFileSync(path.join(f.root, "maps/generated/storybook.md"), "utf8"), first); }); -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("gap reports combine associations with local verification scope and retain historical gaps", t => { + const f = mapFixture(t); + f.story("task", { capabilities: ["tasks/create"], status: "historical" }); + const file = "maps/feature-map/tasks.md"; + f.write(file, readFileSync(path.join(f.root, file), "utf8") + "\n### Storybook verification\n\n#### `create`\n\nScope: cli\nStorybook: No story required for the command.\nProduction: Run the command.\nSources: Inspect the CLI.\n"); + const { catalog, index } = inspect(f); + const report = renderVerification(catalog, index); + assert.match(report, /2 without a current, mixed or unreviewed example/); + assert.match(report, /No story required for the command/); + assert.match(report, /Production: Run the command/); }); -test("feature index keeps empty homes and cross-feature references in map order", t => { - const f = fixture(t); - f.write("maps/feature-map/README.md", "### Work\n| [Goals](./goals.md) | Align work. |\n| [Tasks](./tasks.md) | Create work. |\n"); - f.write("maps/feature-map/goals.md", "## Sub-features\n- `hierarchy`: Link goals.\n## Gotchas\n"); - f.catalog.entries[0].capabilities.push("goals/hierarchy"); - const index = renderIndex(f.catalog, f.stories, featureIndex(f.root)); - assert.ok(index.indexOf("### Goals") < index.indexOf("### Tasks")); - assert.match(index, /### Goals[\s\S]*?No primary story suite/); - assert.match(index, /`goals\/hierarchy`: \[Tasks and conversations\/Tasks\/Create\]/); -}); - -test("authored stories cannot collide with generated overview IDs", t => { - const f = fixture(t); - f.stories[0].ids = ["feature-map-tasks--overview"]; - assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /Duplicate story IDs/); -}); - -test("regeneration reports review drift from its own writes without refreshing fingerprints", t => { - const f = fixture(t); - f.write("ui/storybook/.storybook/preview.tsx", "export default { parameters: { options: { storySort: { order: [],\n}, } } };\n"); - reconcileFeatureArtifacts(f.root, featureIndex(f.root), true); - f.write("maps/storybook-map/INDEX.md", ""); - const generatedSource = "ui/storybook/generated/feature-index.json"; - f.catalog.sharedReview.sources.push(generatedSource); - f.catalog.entries[0].sources.push(generatedSource); - f.catalog.sharedReview.fingerprint = fingerprint(f.root, f.catalog.sharedReview.sources); - f.catalog.entries[0].fingerprint = fingerprint(f.root, f.catalog.entries[0].sources); - assert.deepEqual(reconcileCatalog(f.root, f.catalog, f.stories, true), []); - const reviewed = f.catalog.sharedReview.fingerprint; - f.write("maps/feature-map/tasks.md", "## Sub-features\n- `create`: Updated description.\n- `discussion`: discuss\n## Gotchas\n"); - const errors = reconcileCatalog(f.root, f.catalog, f.stories, true); - assert.equal(errors.filter(error => error.includes("source changed; review")).length, 2); - assert.equal(f.catalog.sharedReview.fingerprint, reviewed); - assert.notEqual(fingerprint(f.root, f.catalog.sharedReview.sources), reviewed); - f.catalog.sharedReview.fingerprint = fingerprint(f.root, f.catalog.sharedReview.sources); - f.catalog.entries[0].fingerprint = fingerprint(f.root, f.catalog.entries[0].sources); - assert.deepEqual(reconcileCatalog(f.root, f.catalog, f.stories, true), []); - assert.deepEqual(reconcileCatalog(f.root, f.catalog, f.stories), []); -}); - -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; +test("the CSF parser preserves explicit IDs, export filtering and play counts", t => { + const f = mapFixture(t); + f.write(f.file, `import type { Meta } from '@storybook/react-vite'; + const meta = { id: 'stable-task', title: 'Work/Tasks/Create', excludeStories: ['helper'], parameters: { paperclip: { capabilities: ['tasks/create'] } } } 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 = {}; + export const Empty = {}; + export const Filled = { play: async () => {} }; `); - 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", metaId: "stable-task", ids: ["stable-task--empty", "stable-task--filled"], plays: 1, + const [story] = scanStories(f.root); + assert.deepEqual(story.ids, ["stable-task--empty", "stable-task--filled"]); + assert.equal(story.plays, 1); +}); + +test("independent story and feature branches merge in either order with identical clean generated maps", t => { + const f = mapFixture(t); + f.write(".gitignore", readFileSync(path.join(f.root, ".gitignore"), "utf8") + "node_modules\n"); + const git = (...args) => execFileSync("git", ["-c", "user.name=Map test", "-c", "user.email=map@example.test", "-c", "commit.gpgsign=false", ...args], { + cwd: f.root, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"], env: { ...process.env, GIT_CONFIG_GLOBAL: "/dev/null", GIT_CONFIG_NOSYSTEM: "1" }, }); - assert.deepEqual(stories.find(story => story.file.endsWith("other.stories.ts")), { - file: "ui/storybook/stories/nested/other.stories.ts", title: "Other/Subject", metaId: undefined, ids: ["other-subject--included"], plays: 0, - }); + git("init", "-b", "main"); + git("add", "."); + git("commit", "-qm", "Initial recipes and story"); + git("checkout", "-b", "story-change"); + f.story("task", { capabilities: ["tasks/create"], notes: "Retain creation draft." }, { exports: "export const Empty = {}; export const Draft = {};" }); + git("add", "."); git("commit", "-qm", "Add task draft example"); + git("checkout", "-b", "feature-addition", "main"); + f.feature("goals", "Goals", ["hierarchy"], { order: 20 }); + f.story("goal", { capabilities: ["goals/hierarchy"] }, { area: "goals", title: "Work/Goals/Goal" }); + git("add", "."); git("commit", "-qm", "Add goal capability and example"); + const results = []; + for (const [first, second] of [["story-change", "feature-addition"], ["feature-addition", "story-change"]]) { + git("checkout", "-b", `merged-${first}`, "main"); + git("merge", "--no-edit", first); + git("merge", "--no-edit", second); + const result = generateStorybook(f.root); + assert.equal(git("status", "--porcelain"), ""); + assert.deepEqual(result.stories.flatMap(story => story.ids).sort(), ["stable-goal--empty", "stable-task--draft", "stable-task--empty"]); + results.push(["ui/storybook/generated/catalog.json", "ui/storybook/generated/feature-index.json", "maps/generated/storybook.md", "maps/generated/verification.md", "ui/storybook/.storybook/preview.tsx"].map(file => readFileSync(path.join(f.root, file), "utf8"))); + } + assert.deepEqual(results[0], results[1]); }); diff --git a/scripts/storybook-feature-index.mjs b/scripts/storybook-feature-index.mjs index 5dd7cf0afa9..d13df347b35 100644 --- a/scripts/storybook-feature-index.mjs +++ b/scripts/storybook-feature-index.mjs @@ -1,51 +1,11 @@ -import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs"; +import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; +import { featureIndex, mapIndexes, pageInventory, sidebarLabel } from "./feature-map.mjs"; +export { featureIndex, sidebarLabel } from "./feature-map.mjs"; export const generatedRoot = "ui/storybook/generated"; -export const sidebarLabel = title => title.replaceAll("/", ", "); - -export function featureIndex(root) { - const sections = []; - let section; - const seen = new Set(); - const source = readFileSync(path.join(root, "maps/feature-map/README.md"), "utf8"); - for (const line of source.split("\n")) { - if (line.startsWith("### ")) { - section = { title: line.slice(4), features: [] }; - sections.push(section); - } - const match = line.match(/^\| \[([^\]]+)\]\(\.\/([a-z0-9-]+)\.md\) \| (.*) \|$/); - if (!match) { - if (line.startsWith("| [")) throw new Error(`Unrecognized feature-map row: ${line}`); - continue; - } - if (!section || seen.has(match[2])) throw new Error(`Invalid feature-map entry: ${line}`); - const [, title, id, description] = match; - seen.add(id); - const recipe = readFileSync(path.join(root, `maps/feature-map/${id}.md`), "utf8"); - const body = recipe.split(/^## Sub-features\s*$/m)[1]?.split(/^## /m)[0]; - if (!body) throw new Error(`Missing sub-features: ${id}`); - const capabilities = []; - for (const row of body.trim().split("\n")) { - const capability = row.match(/^- `([^`]+)`:\s*(.*)$/); - if (capability) { - const [, key, text] = capability; - capabilities.push({ id: `${id}/${key}`, label: key.replaceAll("-", " ").replace(/^./, letter => letter.toUpperCase()), description: text }); - } else if (row.trim() && capabilities.length) { - capabilities.at(-1).description += ` ${row.trim()}`; - } - } - if (!capabilities.length || new Set(capabilities.map(item => item.id)).size !== capabilities.length) throw new Error(`Invalid sub-features: ${id}`); - section.features.push({ id, title, description, capabilities }); - } - const populated = sections.filter(item => item.features.length); - if (!populated.length) throw new Error("Feature-map index has no feature families"); - for (const file of readdirSync(path.join(root, "maps/feature-map"))) { - if (file.endsWith(".md") && file !== "README.md" && !seen.has(file.slice(0, -3))) throw new Error(`Feature recipe missing from index: ${file}`); - } - return { sections: populated }; -} +export const generatedPreview = "ui/storybook/.storybook/preview.tsx"; export function featureOrder(index) { return ["Overview", ...index.sections.flatMap(section => [sidebarLabel(section.title), @@ -56,6 +16,24 @@ export function featureOrder(index) { export function featureArtifacts(index) { const outputs = new Map([ [`${generatedRoot}/feature-index.json`, JSON.stringify(index, null, 2) + "\n"], + [generatedPreview, [ + 'import type { Preview } from "@storybook/react-vite";', + 'import base from "./preview-base";', + "", + "const preview: Preview = {", + " ...base,", + " parameters: {", + " ...base.parameters,", + " options: {", + " ...base.parameters?.options,", + ` storySort: { order: ${JSON.stringify(featureOrder(index))} },`, + " },", + " },", + "};", + "export default preview;", + "", + ].join("\n")], + ...mapIndexes(index), ]); for (const section of index.sections) { for (const feature of section.features) { @@ -80,47 +58,28 @@ export function featureArtifacts(index) { return outputs; } -export function reconcileFeatureArtifacts(root, index, write = false) { - const outputs = featureArtifacts(index); - const errors = []; - function inspect(directory) { - if (!existsSync(path.join(root, directory))) return; - for (const entry of readdirSync(path.join(root, directory), { withFileTypes: true })) { - const file = `${directory}/${entry.name}`; - if (entry.isDirectory()) inspect(file); - else if (!outputs.has(file)) errors.push(`Unexpected generated feature file: ${file}`); - } - } - inspect(generatedRoot); - if (errors.length) return errors; +export function writeArtifacts(root, outputs) { for (const [file, content] of outputs) { const destination = path.join(root, file); - if (write) { - mkdirSync(path.dirname(destination), { recursive: true }); - writeFileSync(destination, content); - } else if (!existsSync(destination) || readFileSync(destination, "utf8") !== content) { - errors.push(`${file}: generated feature index is stale; run storybook-catalog.mjs --write`); + if (existsSync(destination) && readFileSync(destination, "utf8") === content) continue; + mkdirSync(path.dirname(destination), { recursive: true }); + writeFileSync(destination, content); + } +} + +export function generateFeatureArtifacts(root, index = featureIndex(root)) { + const outputs = featureArtifacts(index); + outputs.set("maps/generated/coverage.json", JSON.stringify(pageInventory(root, index), null, 2) + "\n"); + const directory = `${generatedRoot}/features`; + if (existsSync(path.join(root, directory))) { + for (const name of readdirSync(path.join(root, directory))) { + const file = `${directory}/${name}`; + if (name.endsWith(".stories.tsx") && !outputs.has(file)) rmSync(path.join(root, file), { force: true }); } } - const previewFile = "ui/storybook/.storybook/preview.tsx"; - const previewPath = path.join(root, previewFile); - const preview = readFileSync(previewPath, "utf8"); - const pattern = /(\bstorySort:\s*\{\s*order:\s*)([\s\S]*?)(,\s*\n\s*\},)/g; - if ([...preview.matchAll(pattern)].length !== 1) throw new Error("Expected one inline storySort.order in preview.tsx"); - const order = JSON.stringify(featureOrder(index), null, 2) - .replace(/("[^"]+",)\n\s+\[\n\s+"Overview",\n\s+"\*"\n\s+\]/g, '$1 ["Overview", "*"]') - .replaceAll("\n", "\n "); - const updated = preview.replace(pattern, (_, before, value, after) => before + order + after); - if (write) writeFileSync(previewPath, updated); - else if (updated !== preview) errors.push(`${previewFile}: generated sidebar order is stale; run storybook-catalog.mjs --write`); - return errors; + writeArtifacts(root, outputs); } if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { - const root = fileURLToPath(new URL("..", import.meta.url)); - const errors = reconcileFeatureArtifacts(root, featureIndex(root)); - if (errors.length) { - errors.forEach(error => console.error(error)); - process.exitCode = 1; - } + generateFeatureArtifacts(fileURLToPath(new URL("..", import.meta.url))); } diff --git a/scripts/storybook-feature-index.test.mjs b/scripts/storybook-feature-index.test.mjs index dd345a0d694..6797dd41258 100644 --- a/scripts/storybook-feature-index.test.mjs +++ b/scripts/storybook-feature-index.test.mjs @@ -1,73 +1,98 @@ import assert from "node:assert/strict"; -import { mkdtempSync, mkdirSync, readFileSync, writeFileSync, rmSync } from "node:fs"; -import os from "node:os"; +import fs, { existsSync, readFileSync, rmSync } from "node:fs"; +import { syncBuiltinESMExports } from "node:module"; import path from "node:path"; import { test } from "node:test"; -import { featureArtifacts, featureIndex, featureOrder, reconcileFeatureArtifacts } from "./storybook-feature-index.mjs"; +import { featureArtifacts, featureIndex, featureOrder, generateFeatureArtifacts } from "./storybook-feature-index.mjs"; +import { mapFixture } from "./map-test-fixture.mjs"; -function fixture(t) { - const root = mkdtempSync(path.join(os.tmpdir(), "storybook-feature-index-")); - t.after(() => rmSync(root, { recursive: true, force: true })); - const write = (file, text) => { - mkdirSync(path.dirname(path.join(root, file)), { recursive: true }); - writeFileSync(path.join(root, file), text); - }; - write("maps/feature-map/README.md", "# Map\n### Work\n| [Tasks](./tasks.md) | Create and follow work. |\n| [Goals](./goals.md) | Align work. |\n### Connections\n| [Apps](./apps.md) | Connect tools. |\n"); - write("maps/feature-map/tasks.md", "# Tasks\n## Sub-features\n- `create`: Create work;\n retain the initial description.\n- `review`: Review it.\n## How to get to it\nNot a capability.\n"); - write("maps/feature-map/goals.md", "# Goals\n## Sub-features\n- `hierarchy`: Link goals.\n## Gotchas\n"); - write("maps/feature-map/apps.md", "# Apps\n## Sub-features\n- `connect`: Connect an app.\n## Gotchas\n"); - write("ui/storybook/.storybook/preview.tsx", "export default { parameters: { options: { storySort: { order: [],\n}, unrelated: true } } };\n"); - return { root, write }; -} - -test("feature index preserves recipe names, map order, and multiline capability descriptions", t => { - const { root } = fixture(t); - const index = featureIndex(root); +test("recipes own discovery, names, section order and multiline capability descriptions", t => { + const f = mapFixture(t); + f.feature("goals", "Goals", ["hierarchy"], { order: 20 }); + f.feature("apps", "Apps", ["connect"], { section: "Connections", sectionOrder: 20 }); + const recipe = path.join(f.root, "maps/feature-map/tasks.md"); + f.write("maps/feature-map/tasks.md", readFileSync(recipe, "utf8").replace("create work.", "Create work;\n retain its description.")); + const index = featureIndex(f.root); assert.deepEqual(index.sections.map(section => section.title), ["Work", "Connections"]); assert.deepEqual(index.sections.flatMap(section => section.features.map(feature => feature.id)), ["tasks", "goals", "apps"]); - assert.deepEqual(index.sections[0].features[0].capabilities, [ - { id: "tasks/create", label: "Create", description: "Create work; retain the initial description." }, - { id: "tasks/review", label: "Review", description: "Review it." }, - ]); + assert.equal(index.sections[0].features[0].capabilities[0].description, "Create work; retain its description."); assert.deepEqual(featureOrder(index), ["Overview", "Work", ["Tasks", ["Overview", "*"], "Goals", ["Overview", "*"]], "Connections", ["Apps", ["Overview", "*"]], "Foundations"]); }); -test("every feature gets a stable overview, including features with no authored stories", t => { - const { root } = fixture(t); - const index = featureIndex(root); - const outputs = featureArtifacts(index); - const file = "ui/storybook/generated/features/goals.stories.tsx"; - assert.match(outputs.get(file), /id: "feature-map-goals"/); - assert.match(outputs.get(file), /title: "Work\/Goals\/Overview"/); - index.sections[0].features[1].title = "Work alignment"; - assert.match(featureArtifacts(index).get(file), /id: "feature-map-goals"/); - assert.match(featureArtifacts(index).get(file), /title: "Work\/Work alignment\/Overview"/); - index.sections[0].features[1].title = "CLI/API and local worktrees"; - assert.match(featureArtifacts(index).get(file), /title: "Work\/CLI, API and local worktrees\/Overview"/); - assert.ok(featureOrder(index)[2].includes("CLI, API and local worktrees")); +test("equal local orders preserve independently added features using their stable filename", t => { + const f = mapFixture(t); + f.feature("goals", "Goals"); + f.feature("apps", "Apps"); + assert.deepEqual(featureIndex(f.root).sections[0].features.map(feature => feature.id), ["apps", "goals", "tasks"]); }); -test("generated guides detect upstream drift, local edits, missing files, and unknown files", t => { - const { root, write } = fixture(t); - const index = featureIndex(root); - assert.equal(reconcileFeatureArtifacts(root, index).length, 5); - assert.deepEqual(reconcileFeatureArtifacts(root, index, true), []); - assert.deepEqual(reconcileFeatureArtifacts(root, index), []); - write("ui/storybook/generated/features/goals.stories.tsx", "export default {};"); - assert.match(reconcileFeatureArtifacts(root, index).join("\n"), /goals.stories.tsx: generated feature index is stale/); - reconcileFeatureArtifacts(root, index, true); - index.sections.reverse(); - assert.match(reconcileFeatureArtifacts(root, index).join("\n"), /preview.tsx: generated sidebar order is stale/); - assert.match(readFileSync(path.join(root, "ui/storybook/.storybook/preview.tsx"), "utf8"), /unrelated: true/); - write("ui/storybook/generated/features/orphan.stories.tsx", "keep this visible"); - assert.match(reconcileFeatureArtifacts(root, index, true).join("\n"), /Unexpected generated feature file/); - assert.equal(readFileSync(path.join(root, "ui/storybook/generated/features/orphan.stories.tsx"), "utf8"), "keep this visible"); +test("every discovered feature gets a stable overview, including areas without stories", t => { + const f = mapFixture(t); + f.feature("goals", "CLI/API and goals", ["hierarchy"]); + const index = featureIndex(f.root); + const output = featureArtifacts(index).get("ui/storybook/generated/features/goals.stories.tsx"); + assert.match(output, /id: "feature-map-goals"/); + assert.match(output, /title: "Work\/CLI, API and goals\/Overview"/); }); -test("malformed or omitted map entries fail instead of silently hiding a feature", t => { - const { root, write } = fixture(t); - write("maps/feature-map/README.md", "### Work\n| [Tasks](./tasks.md) | Tasks |\n"); - assert.throws(() => featureIndex(root), /missing from index/); - write("maps/feature-map/README.md", "### Work\n| [Tasks](tasks.md) | Tasks |\n"); - assert.throws(() => featureIndex(root), /Unrecognized feature-map row/); +test("fresh generation rebuilds missing outputs, removes retired overviews and never edits authored preview", t => { + const f = mapFixture(t); + const authored = readFileSync(path.join(f.root, "ui/storybook/.storybook/preview-base.tsx"), "utf8"); + f.feature("goals", "Goals", ["hierarchy"]); + generateFeatureArtifacts(f.root); + const overview = path.join(f.root, "ui/storybook/generated/features/goals.stories.tsx"); + assert.ok(existsSync(overview)); + assert.match(readFileSync(path.join(f.root, "ui/storybook/.storybook/preview.tsx"), "utf8"), /storySort: \{ order: \[/); + rmSync(path.join(f.root, "maps/feature-map/goals.md")); + rmSync(path.join(f.root, "maps/agent-access-map/goals.md")); + generateFeatureArtifacts(f.root); + assert.equal(existsSync(overview), false); + assert.equal(readFileSync(path.join(f.root, "ui/storybook/.storybook/preview-base.tsx"), "utf8"), authored); + assert.match(readFileSync(path.join(f.root, "maps/generated/feature-map.md"), "utf8"), /Tasks/); +}); + +test("missing metadata, duplicate capabilities and inconsistent group order fail visibly", t => { + const f = mapFixture(t); + f.write("maps/feature-map/new.md", "# New\n"); + assert.throws(() => featureIndex(f.root), /missing navigation/); + f.feature("new", "New", ["create", "create"]); + assert.throws(() => featureIndex(f.root), /duplicate capability/); + f.feature("new", "New", ["create"], { sectionOrder: 99 }); + assert.throws(() => featureIndex(f.root), /inconsistent section order/); +}); + +test("overlapping generators can both retire the same overview", t => { + const f = mapFixture(t); + const retired = "ui/storybook/generated/features/retired.stories.tsx"; + f.write(retired, "export const Overview = {};\n"); + const directory = path.join(f.root, "ui/storybook/generated/features"); + const readDirectory = fs.readdirSync; + let competed = false; + // Reproduce the interleaving deterministically: the other generator removes + // the file after this generator lists it, before this generator removes it. + const mock = t.mock.method(fs, "readdirSync", (...args) => { + const listing = readDirectory(...args); + if (args[0] === directory && !competed) { + competed = true; + rmSync(path.join(f.root, retired)); + } + return listing; + }); + syncBuiltinESMExports(); + try { + generateFeatureArtifacts(f.root); + assert.equal(competed, true); + assert.equal(existsSync(path.join(f.root, retired)), false); + assert.ok(existsSync(path.join(directory, "tasks.stories.tsx"))); + } finally { + mock.mock.restore(); + syncBuiltinESMExports(); + } +}); + +test("verification guidance rejects orphan capability references", t => { + const f = mapFixture(t); + const file = "maps/feature-map/tasks.md"; + f.write(file, readFileSync(path.join(f.root, file), "utf8") + "\n### Storybook verification\n\n#### `missing`\n\nScope: cli\nStorybook: Use CLI.\nProduction: Execute.\nSources: Inspect.\n"); + assert.throws(() => featureIndex(f.root), /unknown or duplicate verification capability/); }); diff --git a/server/src/__tests__/chat-channels.integration.test.ts b/server/src/__tests__/chat-channels.integration.test.ts index fdf06753b93..2e8456d3a80 100644 --- a/server/src/__tests__/chat-channels.integration.test.ts +++ b/server/src/__tests__/chat-channels.integration.test.ts @@ -4984,6 +4984,10 @@ describeEmbeddedPostgres("chat channel control-plane integration", () => { for (const comment of f.responseComments.values()) comments.set(comment.id, comment); let head = "b".repeat(40); let check = { id: 99, status: "completed", external_id: `${f.endpoint.id}:91:${head}`, app: { id: Number(f.endpoint.botExternalId) } }; + // Other bots can publish the same named check on this PR. Neither another + // App nor a different endpoint's review may be selected for our updates. + const peerCheck = { ...check, id: 9901, app: { id: Number(f.endpoint.botExternalId) + 1 } }; + const otherEndpointCheck = { ...check, id: 9902, external_id: `other-bot:91:${head}` }; const pull = () => ({ number: 91, title: "Test PR", @@ -5054,7 +5058,7 @@ describeEmbeddedPostgres("chat channel control-plane integration", () => { }, ]); if (url.includes("/check-runs?")) - return Response.json({ check_runs: [check] }); + return Response.json({ check_runs: [peerCheck, otherEndpointCheck, check] }); return Response.json([]); }); const service = githubChatReviewService(db, f.providerFetch); @@ -5142,6 +5146,11 @@ describeEmbeddedPostgres("chat channel control-plane integration", () => { conclusion: "failure", details_url: `https://current-vanity.example/${company.issuePrefix}/issues/${conversation.issueId}`, }); + const postedSummary = mutations.find((m) => typeof m.body.body === "string" && m.body.body.includes("Addition subtracts")); + expect(postedSummary?.body.body).toContain(`## ${f.endpoint.botLabel} — 2/5`); + const publishedCheck = mutations.find((m) => m.body.conclusion === "failure"); + expect(publishedCheck?.url).toBe(`https://api.github.com/repos/paperclipai/paperclip/check-runs/${check.id}`); + expect(mutations.some((m) => /\/check-runs\/990[12]$/.test(m.url))).toBe(false); const publishedCount = mutations.length; const retried = await service.execute( session, diff --git a/server/src/services/chat-channels/github/review-heading.test.ts b/server/src/services/chat-channels/github/review-heading.test.ts new file mode 100644 index 00000000000..1084ab7b972 --- /dev/null +++ b/server/src/services/chat-channels/github/review-heading.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from "vitest"; +import { githubReviewHeading } from "./review-heading.js"; + +describe("GitHub review heading", () => { + it("uses the GitHub bot display name independently of the assigned agent", () => { + expect(githubReviewHeading({ botDisplayName: "Ponytail Bottybois Review", botUsername: "ponytail-bottybois-review[bot]", agentName: "Ponytail", score: 3 })) + .toBe("## Ponytail Bottybois Review — 3/5"); + }); + it("falls back to the bot login, then the agent name, for older connections", () => { + expect(githubReviewHeading({ botDisplayName: null, botUsername: "ponytail[bot]", agentName: "Ponytail", score: null })) + .toBe("## ponytail — Incomplete"); + expect(githubReviewHeading({ botDisplayName: " ", botUsername: null, agentName: "Ponytail", score: 5 })) + .toBe("## Ponytail — 5/5"); + }); + it("keeps provider display names from injecting Markdown or additional lines", () => { + expect(githubReviewHeading({ botDisplayName: "[Bot](https://example.test)\n