Moves phases 08–11 execution artifacts from .planning/phases/ to .planning/milestones/v0.2-phases/ to keep .planning/phases/ clean for the next milestone. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
11 KiB
phase, plan, type, wave, depends_on, files_modified, autonomous, requirements, must_haves
| phase | plan | type | wave | depends_on | files_modified | autonomous | requirements | must_haves | ||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10-ux-interaction | 03 | execute | 0 |
|
true |
|
|
Purpose: Per D-11/D-12/D-13, every view computes its own segments array. Admin views (e.g. Admin › Users) and settings (Settings › Account) need static segments without a "Home" root. File manager and cloud views use folder store breadcrumb data with a "Home" or "Cloud" root.
Output: BreadcrumbBar.vue (Options API, props segments/rootLabel/showRoot, emits navigate) + Vitest unit tests adapted from the existing FolderBreadcrumb tests.
<execution_context> @$HOME/.claude/get-shit-done/workflows/execute-plan.md @$HOME/.claude/get-shit-done/templates/summary.md </execution_context>
@CLAUDE.md @.planning/phases/10-ux-interaction/10-CONTEXT.md @.planning/phases/10-ux-interaction/10-RESEARCH.md @.planning/phases/10-ux-interaction/10-PATTERNS.md @frontend/src/components/folders/FolderBreadcrumb.vue @frontend/src/components/folders/__tests__/FolderBreadcrumb.test.js Per D-11, D-12, D-13 (CONTEXT.md): - Props: - `segments` (Array, default []) — array of `{ id?, label }` objects - Items without `id` render as plain non-clickable text (admin static segments) - Last item is ALWAYS plain non-clickable text regardless of `id` - `rootLabel` (String, default 'Home') — text for the root button when showRoot=true - `showRoot` (Boolean, default true) — when false, omit the root button entirely - Emits: `navigate` with `segment.id` (intermediate click) or `null` (root click) - Last segment: plain ``, no click handler - >4 segments: collapse pattern `[first, {id:'ellipsis', label:'…'}, ...last_two]`Reference implementation (FolderBreadcrumb.vue):
- Uses
<script setup>(we will use Options API per CLAUDE.md for THIS new component — exception in PATTERNS.md says BreadcrumbBar may use script setup since it replaces a setup component; pick Options API anyway for consistency with EmptyState/AppIcon) - Renders
<nav aria-label>><ol>><li>segments
Segment shape change:
- FolderBreadcrumb uses
{ id, name }— BreadcrumbBar uses{ id?, label } - Wave 1 plans will map
{id, name}→{id, label: name}at the call sites
- `
- When `showRoot`: render the root `
- {{ rootLabel }} ` - For each segment in visibleSegments with index: - Separator `` shown only when there is something to the left (showRoot OR idx > 0) - If `segment.id === 'ellipsis'`: `
- … ` - If `idx === visibleSegments.length - 1`: `
- {{ segment.label }} ` - Else if `segment.id`: `
- {{ segment.label }} ` - Else: `
- {{ segment.label }} ` (no id, no click) Create `frontend/src/components/ui/BreadcrumbBar.vue` using Options API. Import AppIcon from `./AppIcon.vue`. Implement exactly the template described in the behavior block. Match the FolderBreadcrumb visual style (text-indigo-600, hover:underline for clickable; text-gray-900 font-medium for the last segment; text-gray-400 for separator). Use `` for separators (NO inline svg — this is the new icon centralization paradigm). Skip the separator before the first segment when `!showRoot`. No comments inside the file. cd frontend && npm run test -- --run BreadcrumbBar Expected: all 10 tests PASS. - File `frontend/src/components/ui/BreadcrumbBar.vue` exists - File imports AppIcon from `./AppIcon.vue` - File contains `name: 'BreadcrumbBar'` - Template contains `` - All 10 tests pass - File uses Options API BreadcrumbBar.vue implemented; 10 tests green. - `cd frontend && npm run test -- --run BreadcrumbBar` exits 0 with 10 passing tests - `grep -E "name:\\s*'BreadcrumbBar'" frontend/src/components/ui/BreadcrumbBar.vue` returns 1 match - `grep -E "rootLabel" frontend/src/components/ui/BreadcrumbBar.vue` returns ≥ 2 matches (prop + template) - `grep -E "showRoot" frontend/src/components/ui/BreadcrumbBar.vue` returns ≥ 2 matches - `grep -E "
<success_criteria>
BreadcrumbBar.vue is ready to replace FolderBreadcrumb.vue everywhere. Wave 1 plan 10-06 will swap the import in StorageBrowser.vue, update FileManagerView/CloudFolderView to map breadcrumb to {id, label}, wire admin/settings views to pass static segments, and delete FolderBreadcrumb.vue.
</success_criteria>