Skip to content

Reconcile exact tree versions against their common ancestor - #23

Merged
ctoth merged 6 commits into
masterfrom
feat/base-aware-tree-merge-174
Oct 20, 2026
Merged

ctoth merged 6 commits into
masterfrom
feat/base-aware-tree-merge-174

Conversation

@ctoth

@ctoth ctoth commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator

Propstore's ordinary-family merge currently compares only the two parent trees: a deleted stance returns from an unchanged peer, and a one-sided edit is rejected. Add the generic storage operation needed to compare exact base/left/right path versions before application-owned family transport.

iter_merged_tree_entries propagates one-sided additions, modifications and deletions, converges equal current object IDs, and raises TreeMergeConflict with exact path/base/parent witnesses for incompatible changes. It enumerates lazily and leaves final path/tree admission with the existing publisher. The implementation has no family or application semantics.

The archive-relative classification follows Khanna, Kunal and Pierce, A Formal Investigation of Diff3, pp.3,5, specialized to exact keyed Git paths. Equal object convergence is the requested storage equality contract; this does not implement Diff3's textual list alignment.

Validation: the new focused file passes26 cases covering symmetric path states, lazy conflicts, real Git history/object witnesses, write-free conflict refusal, and existing tree-prefix admission. The coupled Propstore regression reproduces18 failures before the repair and passes28 cases after path selection plus contributing-occurrence transport.

Supports propstore/propstore#174 and propstore/propstore#303. This draft is one bounded slice; the existing merge requirements remain tracked there.

@ctoth
ctoth marked this pull request as ready for review October 20, 2026 21:48
@ctoth
ctoth merged commit 41db9eb into master Oct 20, 2026
8 checks passed
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