Repository navigation
feat: semantic lineage diff across Git refs (Bundle 8) - #12
Merged
Merged
Conversation
Merged
8 of 9 tasks
iamgp
force-pushed
the
feat/lineage-diff
branch
from
September 14, 2026 08:34
257dc3c to
63358d5
Compare
iamgp
force-pushed
the
feat/lineage-diff
branch
2 times, most recently
from
September 14, 2026 09:53
c6e5465 to
dca0215
Compare
iamgp
force-pushed
the
feat/lineage-diff
branch
from
September 14, 2026 10:36
dca0215 to
a9e93f5
Compare
iamgp
force-pushed
the
feat/lineage-diff
branch
from
September 14, 2026 12:19
a9e93f5 to
76ddd08
Compare
iamgp
force-pushed
the
feat/lineage-diff
branch
from
September 14, 2026 13:25
76ddd08 to
c677ee9
Compare
iamgp
force-pushed
the
feat/lineage-diff
branch
from
September 14, 2026 14:51
c677ee9 to
f81c08c
Compare
iamgp
force-pushed
the
feat/lineage-diff
branch
from
September 14, 2026 15:49
f81c08c to
876c2bb
Compare
iamgp
force-pushed
the
feat/lineage-diff
branch
2 times, most recently
from
September 14, 2026 17:57
8b4bde4 to
dc9438b
Compare
…ee compilation, orphaned-consumer impact Bundle 8 on top of contracts/breaking. `lineage --diff <git-ref>` is the code-side complement to the data-side `branch_diff`: it answers "what does this branch change about the graph itself" before promote merges the data branch. - core/lineage_diff.rs: lineage_diff(base, candidate) compares two LineageGraphs node-for-node and edge-for-edge — nodes added/removed/ field-changed (version, materialization, target, type, path), input edges gained or lost (dependency structure, not just files), column derives edges whose transformation/directness/confidence/expression moved, and per removed node the base-side consumers it orphans. - core/git.rs checkout_tree: materialises the workspace subtree at a resolved commit into a tempdir via ls-tree + cat-file --batch — read-only, no worktree, safe beside a dirty checkout. Symlinks and nested workspace prefixes handled. - lineage --diff <ref>: loads + compiles the base tree, applies the same catalog override and catalogue enrichment as the candidate compile so both sides compare like for like, prints the delta, writes lineage_diff.json with the resolved base_commit, and fails cleanly when the base ref cannot load or compile. - NodeMeta gains PartialEq for field-level comparison.
iamgp
force-pushed
the
feat/lineage-diff
branch
from
September 14, 2026 18:45
dc9438b to
5448d83
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.
Summary
Bundle 8 of the lakehouse-native stack, based on Bundle 7 (#11).
lineage --diff <git-ref>is the code-side complement to the data-sidebranch_diff: it answers "what does this branch change about the graph itself" beforepromotemerges the data branch.core/lineage_diff.rs:lineage_diff(base, candidate)compares twoLineageGraphs node-for-node and edge-for-edge —nodes_added/removed/changed(version, materialization, target, type, path),edges_added/removed(dependency structure — a model that started reading a dataset is a changedinputedge, not just a changed file),edges_changed(columnderivesedges whose transformation/directness/confidence/expression moved), andimpactsnaming the base-side consumers each removed node orphans.core/git.rs::checkout_tree: materialises the workspace subtree at a resolved commit into a tempdir vials-tree+cat-file --batch— read-only, no worktree, safe beside a dirty checkout or in-progress rebase. Handles nested workspace prefixes and symlinked files.lineage --diff <ref>: loads + compiles the base tree, applies the same--catalogoverride and catalogue enrichment as the candidate compile (so enriched source columns do not diff as "added"), prints the delta, writes.phlo/transform/lineage_diff.jsonwith the resolvedbase_commit, and fails cleanly when the base ref cannot load or compile rather than diffing a partial graph.NodeMetagainsPartialEqfor field-level comparison.In the WAP flow the two reviews now sit side by side:
lineage --diffproves the definitions,branch_diffproves the data.Test plan
cargo test --workspace— all suites greencargo clippy --workspace --all-targets -- -D warnings— cleancargo fmt --all -- --check— cleanlineage_diff.rs(empty diff, added/removed, version change, new dependency edge, orphan impact, column-lineage change)Stacked on #11 — do not merge independently.