Rio
adr/0087-files-tree.mdRaw Markdown · GitHub ↗

ADR-0087: The files pane becomes a tree from the project root

  • Status: Accepted
  • Date: 2026-09-09
  • Deciders: jka
  • Decision: D87

Context

The files pane showed one directory at a time: a .. row went up, and opening a folder replaced the view. Only one level was ever visible. Users wanted to unfold directories in place, as in VS Code and Windows Explorer.

Decision

The pane is a tree rooted at the open project root.

  • Directories have a ▸ or ▾ marker. A single click on the marker (or the indentation to its left) folds or unfolds the directory. A double click on the name toggles a directory or opens a file; Return does the same. A single click on the name selects.
  • The .. row and replace-the-view navigation are removed.
  • Folding keeps the unfolded state of descendants, so reopening a directory restores its previous shape.
  • The set of unfolded directories is held in ::nav_expanded; ::nav_root is always the project root.
  • Rows are rendered recursively from fs.list, one level per call. The two-character git status column stays aligned at every depth, and directory roll-up still marks a folded folder containing changes.
  • Automatic refresh (ADR-0047) repaints when a change lands in any directory currently on screen.
  • File management (ADR-0048) targets the clicked row: New creates inside a directory row (unfolding it) or beside a file row; Rename and Delete apply to any row.

The click routing (marker versus name) is a pure function of row type, depth and column, tested without a display.

Consequences

  • The whole project structure is navigable in place, with the same list component.
  • Persisting the unfolded shape was deferred and then added in ADR-0089.
  • Drag and drop between folders is out of scope.