feat(lineage): add materialization badge for model nodes#1237
feat(lineage): add materialization badge for model nodes#1237
Conversation
Show the materialization strategy (table, view, incremental, ephemeral, materialized_view) on model nodes instead of the generic resource type icon. Each materialization type gets a distinct icon from the cube family: - table: solid cube (reuses existing model icon) - view: eye icon - incremental: 2/3 solid + 1/3 dashed cube - ephemeral: fully dashed cube - materialized_view: solid cube with small eye overlay The badge appears in both the canvas graph nodes and the sidebar detail view. Non-model nodes continue to show the resource type tag. Also adds ResourceTypeTag stories and MaterializationTag stories, and updates LineageCanvas/NodeView fixtures with realistic materialization data across all dbt layers (staging=view, intermediate=ephemeral, fact=incremental, dimension=table, mart=materialized_view). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Danyel Fisher <danyel@gmail.com>
Code Review — PR 1237SummaryAdds materialization badges (table, view, incremental, ephemeral, materialized_view) to model nodes in the lineage graph and sidebar. Clean implementation with proper fallback to ResourceTypeTag for non-model nodes. Type checks and lint pass. Findings[Critical] SVG clipPath ID collision in IconIncrementalFile: const IconIncremental: IconComponent = (props) => {
const id = useId();
const bottomId = `inc-bottom-${id}`;
const topId = `inc-top-${id}`;
// use bottomId/topId in clipPath defs and references
};Alternatively, use a CSS [Warning] Dangling JSDoc comment in primitives.tsFile: Verdict |
Hardcoded clipPath IDs caused collisions when multiple incremental model nodes rendered in the same graph. Use React useId() to generate unique IDs per instance. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Danyel Fisher <danyel@gmail.com>
…NodeTag Materialization is only meaningful for model resources, so these two concepts belong in a single component. NodeTag takes resourceType and optional materialized — when resourceType is "model" with a materialization, it shows the materialization icon/label; otherwise it shows the resource type. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Danyel Fisher <danyel@gmail.com>
Show the materialization strategy (table, view, incremental, ephemeral,
materialized_view) on model nodes instead of the generic resource type
icon. Each materialization type gets a distinct icon from the cube family:
The badge appears in both the canvas graph nodes and the sidebar detail
view. Non-model nodes continue to show the resource type tag.
Also adds ResourceTypeTag stories and MaterializationTag stories, and
updates LineageCanvas/NodeView fixtures with realistic materialization
data across all dbt layers (staging=view, intermediate=ephemeral,
fact=incremental, dimension=table, mart=materialized_view).
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com