Co-authored-by: Carlos Florencio <carlosmflorencio@gmail.com>
4.0 KiB
created, status, requirements, system_design, legacy_specs
| created | status | requirements | system_design | legacy_specs | ||
|---|---|---|---|---|---|---|
| 2026-09-03 | complete |
|
|
Implementation Plan: File Tree Responsive Spacing
Overview
Restore compact file-tree row spacing on coarse-pointer devices, including zoomed-out phones that select the desktop workbench. The existing visible touch action remains available for every coarse pointer; all compositions keep single-line rows.
The prior FileBrowser implementation enabled a 44px overflow trigger and row
wrapping for every non-fine pointer, including wide desktop workbenches. The
trigger remains required; its wrapping behavior caused the spacing in the
report.
Scope
In scope
- Keep the visible 44px action trigger on every coarse-pointer file tree, including desktop workbench.
- Keep file-tree rows compact and single-line in every composition.
- Add regression coverage for coarse-pointer desktop and mobile geometry.
Out of scope
- Changing file-tree data loading, selection, drag/drop, or file operations.
- Changing the context-menu action or chat-context state and message contracts.
- Redesigning the mobile Files surface or changing panel persistence.
Technical approach
Update FileBrowser in apps/web/components/task/file-browser.tsx to retain
the existing coarse-pointer touch-action gate. Keep TreeNodeItem and
SearchResultsList in apps/web/components/task/file-browser-parts.tsx
non-wrapping. Responsive rows reserve a 44px vertical interaction slot for
their absolutely positioned trigger, while labels reserve the horizontal action
space and truncate.
Add focused regression assertions for FileBrowser responsive action wiring
and multi-result search overlays. Extend
apps/web/e2e/tests/task/mobile-file-tree-chat-context.spec.ts with computed
non-wrapping/truncation geometry, two simultaneous mobile search results, and a
1280px coarse-pointer context that verifies non-overlapping 44px action slots.
Tests
AC-UI-FILE-TREE-CHAT-CONTEXT-001.7: existing touch-action component and mobile E2E coverage continue to assert a visible trigger and 44px menu/action targets.AC-UI-FILE-TREE-CHAT-CONTEXT-001.9: focused component coverage verifies coarse-pointer desktop action wiring and multi-result search row anchoring; E2E verifies non-overlapping 44px action slots on wide desktop and no-wrap, truncation, and per-row search actions on mobile.
E2E tests
apps/web/e2e/tests/task/mobile-file-tree-chat-context.spec.tsusing themobile-chromeproject: verify long-name no-wrap/truncation and two row-anchored mobile search results with non-overlapping action slots, then create a 1280px coarse-pointer context that proves a boundary touch reaches the intended 44px action and can add it to chat context.apps/web/e2e/tests/task/file-tree-chat-context.spec.ts: existing desktop right-click flow remains unchanged and covers the desktop action path.
Work orders
Verification results
- Focused component coverage passed, including FileBrowser-level coarse, mobile, and fine-pointer rendering plus multi-result search-overlay anchoring.
- Mobile Chromium E2E:
pnpm e2e:run --project mobile-chrome tests/task/mobile-file-tree-chat-context.spec.tspassed both Pixel 5 no-wrap/truncation with two independently anchored search actions and 1280px coarse-pointer compact-row/add-to-chat scenarios. make fmtandmake lintpassed.make typecheckpassed before the aggregatemake teststage exposed unrelated ambient backend-suite failures.
Risks
- A wide coarse-pointer device must retain the visible action rather than relying on desktop right-click interaction.
- The responsive hook distinguishes viewport composition from pointer precision; tests must cover both so a zoomed-out phone preserves touch access without row wrapping.