Skip to content

feat(desktop): add Inventory and Lineage tabs - #218

Merged
bgarcevic merged 2 commits into
mainfrom
claude/desktop-dependency-visualization-b4ae72
Oct 28, 2026
Merged

bgarcevic merged 2 commits into
mainfrom
claude/desktop-dependency-visualization-b4ae72

Conversation

@bgarcevic

Copy link
Copy Markdown
Owner

What

Two new tabs in the desktop app:

  • Inventory lists everything the analysis read, two ways round:
    • Model → reports: tables and their members, then the model's other objects. Each object shows how many visuals it reaches and expands to them, with "via X" when it gets there through a measure or column built on it. Click a visual to jump to it under Reports.
    • Reports → model: report → page → visual → bound fields. Each field expands on through what it uses, recursively.
    • A filter and an "Unused only" switch narrow either view. Selecting an object fills a detail panel: whether it is used, what it uses, what uses it, and where reports bind it. Double-click an object, or use "Show lineage", to open its lineage.
  • Lineage draws one object's dependencies (left) and impact (right) as columns by edge distance, out to the report visuals.
    • The same tree sits beside the graph as the object picker, and an Objects button hides it to give the graph room.
    • The graph shrinks its nodes to fit before it falls back to scrolling.
    • Search, Back, depth (1–4/All), and Uses / Used by toggles. Hovering a node highlights its edges and shows the reason for each one.
    • Click a node to refocus. When the focus changes, the tree opens to it and scrolls it into view.

The README demo GIF is re-recorded to show both tabs. It drops the update-card scene, and Staged::preview goes with it.

Why

The desktop app could list unused objects but couldn't show why anything was used, or let you browse what an analysis read without knowing what to search for.

How

  • ripbi-app:
    • deps::run is split into deps::load, which builds the graph once into an Explorer, and Explorer::view(&DepsRequest). Interactive front ends can now ask for view after view without re-ingesting the model. run behaves as before, so the CLI is unchanged.
    • Explorer::uses and Explorer::bindings expose the raw edges and report bindings for the tree.
  • desktop-egui/src/lineage.rs: builds the graph and the inventory on a worker thread, then lays the graph out and paints it with egui's painter. No new dependencies; ripbi-core becomes a direct dependency of the desktop crate for the graph types.
  • desktop-egui/src/inventory.rs: the object tree.
    • "Reaches" is precomputed once: for each bound field, walk everything it uses.
    • Groups are custom collapsible rows rather than CollapsingHeader, because CollapsingHeader never wraps its text and long names need to wrap.

Reviewer notes

  • Key columns such as Sales[CustomerKey] show as reaching nearly every visual under Model → reports. That follows ripbi's liveness rules: relationship filter flows keep those columns alive. The "via" note on each row shows which bound field they come through.
  • Bookmark bindings are left out of the report tree.
  • Verified with headless egui_kittest renders of the AdventureWorks sample. Both crates pass clippy with -D warnings. The desktop tests pass, including new layout and inventory tests.

The desktop app could list unused objects but not show why anything is used,
or what an analysis read. Two new tabs answer both:

- Inventory: every object, model → reports (tables and members, each
  expanding to the visuals it reaches, directly or through what uses it) or
  reports → model (pages and visuals, each expanding to its fields and on
  through what they use), with a filter, an unused-only switch, and a detail
  panel of direct links and binding sites.
- Lineage: one object's dependencies and impact as a column graph out to the
  report visuals, beside the same tree; click to refocus, depth and direction
  controls, a hideable tree, and fit-to-width.

ripbi-app splits deps::run into deps::load and Explorer::view so the graph is
built once per analysis, and Explorer exposes uses and bindings for the tree.
The README demo GIF is re-recorded to show both tabs instead of the update
card.
…ency-visualization-b4ae72

# Conflicts:
#	desktop-egui/src/main.rs
@bgarcevic
bgarcevic merged commit 5cbd09f into main Oct 28, 2026
20 checks passed
@bgarcevic
bgarcevic deleted the claude/desktop-dependency-visualization-b4ae72 branch October 28, 2026 19:20
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.

1 participant