[Concept – not for review] Data flow graph on details pages - #2099
Draft
SeanWhelan wants to merge 1 commit into
Draft
SeanWhelan wants to merge 1 commit into
SeanWhelan wants to merge 1 commit into
Conversation
Exploratory prototype, not for review: a Data flow tab on capture, collection and materialization details that shows a spec's lineage as a left-to-right graph. - Walks upstream and downstream one batched liveSpecs(by: names) request per hop, 3 hops by default with "show more"; derivation models are fetched separately since model includes the schema - One edge per derivation transform; disabled transforms dashed; self-sourcing derivations and cycles handled; unreadable sources shown as locked placeholders - In-house layered layout (DFS back edges, longest-path ranks, barycentre ordering, waypoint lanes for long edges), rendered with React Flow (@xyflow/react, MIT) for pan, zoom, drag and minimap - Selecting a spec highlights its lineage and shows a details panel with key properties and a table of related specs or transforms - NavigationTabs accepts a plain label; graphcache keys for LiveSpec (liveSpecId) and status/publication value objects - Unit tests for transform parsing, the graph walk, layout and model facts, using real responses captured from a local stack; Storybook stories built from the same fixtures
SeanWhelan
force-pushed
the
sean/data-flow-view
branch
from
September 28, 2026 14:57
bb84f2c to
794cebe
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Warning
Concept only.
This is an exploratory prototype to show an idea: a lineage graph on the details pages. It's up as a draft so people can look at it and react to the direction. It hasn't been scoped, designed or agreed as something we're building, and the code hasn't been through review. If the idea has legs, it will come back as properly scoped PRs.
The idea
A Data flow tab on capture, collection (including derivation) and materialization details. It shows the spec's lineage as a left-to-right graph: captures → collections → derivations → materializations.
Derivations are the main motivation. Today the details pages show direct neighbours in
RelatedEntities, but nothing about transforms, chains of derivations, or what sits more than one hop upstream or downstream.What the prototype does
liveSpecs(by: { names })request, plus one request for derivation models (modelincludes the schema, so only derivations fetch it).readDelay.@xyflow/react, MIT) handles pan, zoom, fit, controls, the minimap and dragging. Node positions come from a small in-house layered layout, so there's noelkjs. The React Flow attribution is hidden viaproOptions; whether to support React Flow Pro would be a call for us to make if this went further.Findings worth keeping even if the UI isn't
Checked against flow
master@ 93f99e1 on a local stack, as three users with different grants:liveSpecs(by: { names })fails the whole request (plain-textPermissionDenied, not GraphQL JSON) if any single name is unreadable, contrary to the schema comment onLiveSpecRef.userCapability. Batch lookups must only send names whose ref came back with a user capability.readBy/writtenByomit unreadable specs entirely (require_min_capability: Read), whilereadsFrom/writesToreturn them withuserCapability: null. So "no access" placeholders can only ever appear upstream.readsFrom/writesTo/readBy; they're only visible inmodel.readsFromis deduped per source: two transforms on one source give one entry, so per-transform edges needmodel.derive.transforms.readsFromandreadBy.first:.background.paper, so MUI's neutral#121212shows up next to our blue-grey surfaces. The prototype works around it locally; worth fixing in the theme separately.Try it
Storybook:
Details/DataFlowhas seven stories built from real responses captured from the local stack (DataFlow/fixtures/).Not done
No screenshots here, no product or design sign-off, and no thought yet about very large tenants beyond a 200-node cap. Also not started: a prefix-wide graph, throughput on edges, impact analysis, and a warning on transform rename.
Screenshots