Skip to content

feat(navigation): add canonical file tree browser primitive#127

Merged
pcharbon70 merged 1 commit into
mainfrom
claude/widget-file-tree-browser-wave-3-7-b
May 20, 2026
Merged

feat(navigation): add canonical file tree browser primitive#127
pcharbon70 merged 1 commit into
mainfrom
claude/widget-file-tree-browser-wave-3-7-b

Conversation

@ty13r
Copy link
Copy Markdown
Member

@ty13r ty13r commented May 18, 2026

Summary

  • Rebuilt PR feat(navigation): add canonical file tree browser primitive #127 on current main as a canonical baseline navigation primitive.
  • Adds UnifiedIUR.Widgets.Navigation.file_tree_browser/1 with attributes.file_tree and recursive folder/file-leaf normalization.
  • Keeps :file_tree_browser out of UnifiedIUR.Widgets.Components, UnifiedUi.WidgetComponents, and AshUI.WidgetComponents.
  • Wires Ash UI admission and fallback rendering, Live UI native rendering, and Desktop UI / Elm UI native mappings.
  • Documents the public widget type and adds focused tests across the package boundaries.

Architecture Decisions

  • Canonical name: file_tree_browser, generic and repo-independent.
  • Family: baseline :navigation, not layer shell/callout and not widget-component catalog.
  • Canonical attributes: attributes.file_tree with tree_id, root_label, nodes, selected_path, default_expanded?, selection_intent, and toggle_intent.
  • Interactions: Live UI synthesizes canonical selection and change interactions from semantic intents. It does not expose raw on_select / on_toggle event names in canonical data.
  • Presentation: canonical leaf nodes may carry file_kind, language, and line_count; renderer-specific glyphs/markers/indent are local presentation concerns.
  • State: expansion remains host-owned through the semantic toggle intent, so runtime state does not move into the canonical tree model.

Open Questions Answered

  1. :tree_view extension vs new kind: use a new baseline primitive. Filesystem navigation has different semantics from generic data trees.
  2. Family assignment: use baseline :navigation.
  3. Glyph source: keep glyphs out of canonical data; renderers can derive display from file_kind/language/path.
  4. Folder icon: renderer/theme concern; v1 uses an expand/collapse marker only.
  5. Expand/collapse state model: host-owned via toggle_intent.
  6. Map FilesPane migration: follow-up data-shaping integration after the primitive lands.
  7. Drag/drop semantics: deferred follow-up, not part of the canonical v1.

Verification

Passing:

  • mix test packages/unified_iur/test/unified_iur/widgets/file_tree_browser_test.exs packages/unified_iur/test/unified_iur/widgets_test.exs packages/live_ui/test/live_ui/widgets/file_tree_browser_test.exs packages/live_ui/test/live_ui/renderer_test.exs packages/desktop_ui/test/desktop_ui/renderer_test.exs packages/elm_ui/test/elm_ui/renderer_test.exs test/ash_ui/resource/file_tree_browser_test.exs test/ash_ui/phase_31_package_boundary_test.exs test/ash_ui/phase_31_runtime_adapter_test.exs
  • mix format --check-formatted <changed files>
  • bash ./scripts/validate_specs_governance.sh

Known unrelated checkout issue:

  • mix test packages/desktop_ui/test/desktop_ui/phase_eleven_integration_test.exs still fails one existing release-readiness assertion because DesktopUi.Validate reports missing .spec/specs/desktop_ui/* and .spec/planning/desktop_ui/* traceability files in this checkout. The renderer coverage checks pass.

Spec-loop tasks are not available in this checkout: mix spec.prime, mix spec.next, and mix spec.check all return task-not-found.

@pcharbon70 pcharbon70 force-pushed the claude/widget-file-tree-browser-wave-3-7-b branch from 48d44e8 to 0c718c1 Compare May 20, 2026 09:39
@pcharbon70 pcharbon70 changed the title feat(live_ui): add FileTreeBrowser widget Phoenix.Component (Wave 3.7-B Stage-4, DRAFT, Pascal-review REQUIRED) feat(navigation): add canonical file tree browser primitive May 20, 2026
@pcharbon70 pcharbon70 marked this pull request as ready for review May 20, 2026 10:56
@pcharbon70 pcharbon70 merged commit f3c7678 into main May 20, 2026
7 of 8 checks passed
@pcharbon70 pcharbon70 deleted the claude/widget-file-tree-browser-wave-3-7-b branch May 20, 2026 10:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants