# Design: Doc workspace breadcrumb - **Issue:** #208 - **Title on issue:** [ENHANCEMENT] Refactor breadcrumb to Studio › - **Author:** Pier-Jean Malandrino - **Date:** 2026-04-29 - **Status:** Accepted - **Target milestone:** 0.6.0 — Doc-centric ingest - **Impacted layers:** frontend: shared/ui · app - **Audit dimensions likely touched:** Clean Code · Tests · Documentation - **ADR spawned?:** no --- ## 1. Problem There is no breadcrumb component today. The user lands on `/docs/:id?mode=chunks` and has no orientation: which doc, which mode, how to step back. With the new doc-centric URLs introduced in #207, the user navigates between modes on the same doc — a breadcrumb anchors them in the IA. The shape `Studio › ` is the agreed pattern: each segment is a link except the last, the doc title is truncated with ellipsis (full title on hover), and the mode segment updates as the user switches tabs without a page reload. ## 2. Goals - [ ] New `` component renders three segments on doc workspace pages: `Studio › `. - [ ] Each non-last segment is clickable: `Studio` → `/`, `` → `/docs/:id` (default mode). - [ ] Doc title truncates beyond ~40 chars with ellipsis; full title shown via `title` attribute on hover. - [ ] Mode segment reflects current `?mode=` and updates without remount. - [ ] On non-doc routes (`/`, `/runs`, `/index`), the breadcrumb is empty / hidden — no fake breadcrumbs invented. - [ ] Component is data-driven: takes a `Crumb[]` prop so future routes can supply their own. ## 3. Non-goals - Auto-deriving the breadcrumb from the route — for 0.6.0 the doc workspace page passes its crumbs explicitly. Auto-derivation is a follow-up if more pages need it. - Mobile-specific breadcrumb collapsing — a single-line ellipsis is enough for the layout. - Breadcrumbs on store / run pages — those land in 0.7.0 with their own page work. ## 4. Context & constraints ### Existing code surface - `frontend/src/app/App.vue` — the shell. The breadcrumb slot will live in the topbar (between the logo and the right-side actions). - `frontend/src/pages/DocWorkspacePage.vue` (created by #207, placeholder). Will be the first consumer. - `frontend/src/shared/ui/` — home for shared UI primitives. The new component lives here. - `frontend/src/shared/routing/names.ts` (created by #207) — typed route names. - `frontend/src/shared/i18n.ts` — strings. ### Hard constraints - TypeScript strict — `Crumb` is a discriminated union (link vs leaf). - Accessibility — `