feat: implement muse merge-tree — three-way merge without working-tree mutation
- Pure in-memory three-way merge using existing diff_snapshots / detect_conflicts / apply_merge primitives - Resolves branch refs via HEAD, branch name, or full commit ID - Computes LCA via find_merge_base (bidirectional BFS) or --base override - Conflict paths reported with null object_id in merged_manifest - --write-objects persists the conflict-free merged snapshot for use with commit-tree - No MERGE_STATE.json written, no working-tree I/O, no branch ref updates - 25 tests: clean merge, conflicts, trivial, explicit base, working-tree isolation, write-objects, text output, error cases, ANSI rejection, 50-file stress
sha256:1b4d8fc22bde0b07389ba32ab25df236d960705dbd7a9917bc8f7acd91212358
sha
+77
~33
symbols
sha256:38ea2e597dfe8f312d91451f5ed3a65d8950e12bc1ea70e63884d477575e3ccd
snapshot
+77
symbols added
~33
symbols modified
0
dead code introduced
Semantic Changes
110 symbols
+
test_ansi_in_second_branch_name_rejected
function
function test_ansi_in_second_branch_name_rejected L409–412
+
test_both_branches_nonexistent_exits_nonzero
function
function test_both_branches_nonexistent_exits_nonzero L357–360
+
test_branch_order_does_not_affect_conflict_detection
function
function test_branch_order_does_not_affect_conflict_detection L387–395
+
test_clean_merge_manifest_contains_both_changes
function
function test_clean_merge_manifest_contains_both_changes L176–185
+
test_conflicting_merge_exits_nonzero
function
function test_conflicting_merge_exits_nonzero L193–197
+
test_conflicting_merge_manifest_has_null_for_conflicts
function
function test_conflicting_merge_manifest_has_null_for_conflicts L209–214
+
test_conflicting_merge_reports_conflict_paths
function
function test_conflicting_merge_reports_conflict_paths L200–206
+
test_explicit_base_nonexistent_exits_nonzero
function
function test_explicit_base_nonexistent_exits_nonzero L250–257
+
test_no_common_ancestor_exits_nonzero
function
function test_no_common_ancestor_exits_nonzero L363–370
+
test_nonexistent_branch_exits_nonzero
function
function test_nonexistent_branch_exits_nonzero L350–354
+
test_stress_50_files_30_pct_conflicts
function
function test_stress_50_files_30_pct_conflicts L420–452
+
test_text_output_conflict_mentions_path
function
function test_text_output_conflict_mentions_path L338–342
+
test_text_output_shows_branch_names
function
function test_text_output_shows_branch_names L330–335
+
test_trivial_merge_one_side_unchanged
function
function test_trivial_merge_one_side_unchanged L222–231
+
test_write_objects_creates_snapshot
function
function test_write_objects_creates_snapshot L289–299
+
test_write_objects_snapshot_matches_manifest
function
function test_write_objects_snapshot_matches_manifest L302–313
0 comments
To add a comment, use the Muse CLI:
muse hub commit comment sha256:1b4d8fc22bde0b07389ba32ab25df236d960705dbd7a9917bc8f7acd91212358 --body "your comment"
No comments yet. Be the first to start the discussion.