diff --git a/DESIGN.md b/DESIGN.md index e08e9a9be..cee28133a 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -23,14 +23,12 @@ Top to bottom: Nothing page-scoped ever renders in this body; it lists conversations, not product sections. 3. **Footer rail** — Mission Control is pinned above the rail as its own - row. The first-run rail below it is Routines, Files, Skills, Agents, in - that order (CL-6765). Insights and Evals join that rail only when - existing reads prove real usage (turns > 0 / at least one eval run); - Plugins stays off the rail entirely and is reached by deep link or the - command palette. These are utility destinations, not workbenches, and - each is its own top-level route (`/mission-control`, `/routines`, - `/files`, `/skills`, `/agents`; plus `/insights`, `/evals`, `/plugins` - when reached). + row. The first-run rail below it is Routines, Files, Skills, Agents, + Plugins, in that order. Insights and Evals join that rail only when + existing reads prove real usage (turns > 0 / at least one eval run). + These are utility destinations, not workbenches, and each is its own + top-level route (`/mission-control`, `/routines`, `/files`, `/skills`, + `/agents`, `/plugins`; plus `/insights`, `/evals` when reached). 4. **Account row** — avatar and name, anchoring the rail, plus a separate settings icon beside it. The avatar+name half is a menu trigger (weekly usage, feedback, log out) that pops upward; the gear is a diff --git a/PRODUCT.md b/PRODUCT.md index 9ff2ec3e0..7b9ad1ffb 100644 --- a/PRODUCT.md +++ b/PRODUCT.md @@ -79,13 +79,12 @@ A bench that already has one or more workbenches skips first-run and lands on `workbenches[0]` (see `apps/web/src/pages/home-page.tsx`). Myra is the first-run guide in her DM, not a home slot. -The shell's first-run destinations stay small on purpose (CL-6765): +The shell's first-run destinations stay small on purpose: Mission Control is pinned above the footer rail; the rail itself is -Routines, Files, Skills, and Agents. Insights and Evals appear on that -rail only after honest usage exists; Plugins stays reachable by deep -link and the command palette, not as a first-run rail item. New benches -should not meet an empty Plugins / Insights / Evals gallery before they -have anything to put there. +Routines, Files, Skills, Agents, and Plugins. Insights and Evals appear +on that rail only after honest usage exists. New benches should not +meet an empty Insights / Evals gallery before they have anything to +put there. ### Code review's first minute diff --git a/apps/web/src/routes.tsx b/apps/web/src/routes.tsx index eecf74abd..f15d43514 100644 --- a/apps/web/src/routes.tsx +++ b/apps/web/src/routes.tsx @@ -1,10 +1,10 @@ // The route table: one entry per screen, consumed by the command palette // (label) and the route switch (render), so navigation and pages cannot // drift apart. The sidebar itself lists workbenches (conversations), not -// routes — the first-run footer reaches Routines, Files, Skills, and -// Agents; Insights and Evals join that rail only given honest usage. -// Plugins, Insights, Evals, and Settings stay reachable by deep link and -// the palette even when they are off the rail. Conversation deep links +// routes — the first-run footer reaches Routines, Files, Skills, Agents, +// and Plugins; Insights and Evals join that rail only given honest usage. +// Insights, Evals, and Settings stay reachable by deep link and the +// palette even when they are off the rail. Conversation deep links // (`/w/:workbenchId`) stay routable; `/` is the Myra land hop (ensure + // open her conversation) for a bench with a workbench already, or the // guided first-workbench describe screen for a bench with none (CL-6104) @@ -26,6 +26,7 @@ import { FolderOpen, Lightning, ListBullets, + PuzzlePiece, Robot, SlidersHorizontal, SquaresFour, @@ -395,12 +396,11 @@ export const APP_ROUTES: readonly AppRoute[] = [ render: (path: string) => , }, { - // Reached by deep link and the command palette's Pages group — never - // from the first-run footer rail. No `/plugins/:slug` until CL-6417 - // (CL-6817 unlinked the stub). + // First-run footer rail destination. No `/plugins/:slug` until + // CL-6417 (CL-6817 unlinked the stub). path: "/plugins", label: "Plugins", - icon: , + icon: , render: (path: string, navigate: (to: string) => void) => ( ), @@ -426,8 +426,8 @@ function routesInOrder(paths: readonly string[]): readonly AppRoute[] { /** * Everything the command palette treats as a product destination (its * "Pages" group). The first-run sidebar footer reaches Routines / Files / - * Skills / Agents (and Insights / Evals only given honest usage); - * Plugins, Insights, Evals, and Settings stay palette- and + * Skills / Agents / Plugins (and Insights / Evals only given honest + * usage); Insights, Evals, and Settings stay palette- and * deep-link-reachable even when they are off the rail. */ export const NAV_ROUTES: readonly AppRoute[] = routesInOrder([ diff --git a/apps/web/src/shell/sidebar.tsx b/apps/web/src/shell/sidebar.tsx index 4bb80b751..fc6d9170b 100644 --- a/apps/web/src/shell/sidebar.tsx +++ b/apps/web/src/shell/sidebar.tsx @@ -1,14 +1,12 @@ // The one sidebar. Header: the brand mark, then create + search. Body: // Agents and Channels — nothing page-scoped ever renders here. Footer: the -// first-run rail is Routines, Files, Skills, Agents; Insights and Evals -// join only when the existing usage / eval-run reads return real items -// (never a fabricated row, never a new analytics store). Plugins is -// reachable by URL and the command palette, not as a first-run tour -// destination. Below the rail: the account row — avatar + name, the whole -// row is the trigger for a menu that pops upward with weekly usage, -// settings, feedback, and log out. Always present; there is no collapse -// affordance and no second nav column. Approvals belong in the -// conversation, not as a standing band here. +// first-run rail is Routines, Files, Skills, Agents, Plugins; Insights and +// Evals join only when the existing usage / eval-run reads return real items +// (never a fabricated row, never a new analytics store). Below the rail: +// the account row — avatar + name, the whole row is the trigger for a menu +// that pops upward with weekly usage, settings, feedback, and log out. +// Always present; there is no collapse affordance and no second nav column. +// Approvals belong in the conversation, not as a standing band here. // // Inbox is gone (CL-6151, owner decision: tasks + approvals don't flow // into workbenches). @@ -41,6 +39,7 @@ import { Lightning, ListBullets, Plus, + PuzzlePiece, Robot, SignOut, Repeat, @@ -170,7 +169,7 @@ export function Sidebar({ {/* Mission Control is pinned above the footer rail as its own row (DESIGN.md's Shell & Navigation) — not a button inside the - first-run rail, which stays Routines/Files/Skills/Agents. */} + first-run rail, which stays Routines/Files/Skills/Agents/Plugins. */}
+ {showInsights ? (