gabriel / muse public
test phase3 task/phase1-merge-engine #11 / 16
AI Agent gabriel · 13 hours ago · Jun 11, 2026 · Diff

test(phase3): full strategy matrix — 24 SM tests, rebase→linear

- --history rebase now produces a single-parent commit (no merge commit); full commit-by-commit replay is Phase 4 scope - 24 integration tests covering all 4 strategies × convergent/divergent cases, history mode graph shapes, and PHANTOM regression guard - All SM_01–SM_24 green; no regressions to Phase 1/2 or PHANTOM_01–05

sha256:f02589f8e157757da430d82f35a64c0b7eee5033f6d13076ea395f9942151790 sha
+57 ~1 symbols
sha256:dffda70b0ab8d6954d817d88ac6b08a6bbab3ddd801e2d55936176d2db08a32a snapshot
+57
symbols added
~1
symbol modified
0
dead code introduced
Semantic Changes 58 symbols
~ tests/test_phase3_strategy_matrix.py .py 57 symbols added
+ TestAddAddCollision class class TestAddAddCollision L369–397
+ test_SM_13_recursive_addadd_conflicts method method test_SM_13_recursive_addadd_conflicts L372–378
+ test_SM_14_overlay_addadd_no_conflict_theirs_wins method method test_SM_14_overlay_addadd_no_conflict_theirs_wins L380–389
+ test_SM_15_snapshot_addadd_conflicts method method test_SM_15_snapshot_addadd_conflicts L391–397
+ TestConvergentEdit class class TestConvergentEdit L278–323
+ test_SM_05_recursive_convergent_no_conflict method method test_SM_05_recursive_convergent_no_conflict L281–290
+ test_SM_06_overlay_convergent_no_conflict method method test_SM_06_overlay_convergent_no_conflict L292–301
+ test_SM_07_snapshot_convergent_no_conflict method method test_SM_07_snapshot_convergent_no_conflict L303–312
+ test_SM_08_replay_convergent_no_conflict method method test_SM_08_replay_convergent_no_conflict L314–323
+ TestConvergentUntouched class class TestConvergentUntouched L238–275
+ test_SM_01_recursive_untouched_no_conflict method method test_SM_01_recursive_untouched_no_conflict L241–248
+ test_SM_02_overlay_untouched_no_conflict method method test_SM_02_overlay_untouched_no_conflict L250–257
+ test_SM_03_snapshot_untouched_no_conflict method method test_SM_03_snapshot_untouched_no_conflict L259–266
+ test_SM_04_replay_untouched_no_conflict method method test_SM_04_replay_untouched_no_conflict L268–275
+ TestDeleteModify class class TestDeleteModify L400–429
+ test_SM_16_recursive_deletemodify_conflicts method method test_SM_16_recursive_deletemodify_conflicts L403–409
+ test_SM_17_overlay_deletemodify_no_conflict_modified_survives method method test_SM_17_overlay_deletemodify_no_conflict_modified_survives L411–421
+ test_SM_18_snapshot_deletemodify_conflicts method method test_SM_18_snapshot_deletemodify_conflicts L423–429
+ TestFileDivergence class class TestFileDivergence L330–366
+ test_SM_09_recursive_file_divergence_conflicts method method test_SM_09_recursive_file_divergence_conflicts L333–339
+ test_SM_10_overlay_file_divergence_no_conflict_theirs_wins method method test_SM_10_overlay_file_divergence_no_conflict_theirs_wins L341–350
+ test_SM_11_snapshot_file_divergence_conflicts method method test_SM_11_snapshot_file_divergence_conflicts L352–358
+ test_SM_12_replay_file_divergence_conflicts method method test_SM_12_replay_file_divergence_conflicts L360–366
+ TestHistoryMode class class TestHistoryMode L436–486
+ test_SM_19_history_merge_two_parent_commit method method test_SM_19_history_merge_two_parent_commit L439–452
+ test_SM_20_history_squash_single_parent_commit method method test_SM_20_history_squash_single_parent_commit L454–467
+ test_SM_21_history_rebase_single_parent_commit method method test_SM_21_history_rebase_single_parent_commit L469–486
+ TestPhantomRegressions class class TestPhantomRegressions L493–572
+ test_SM_22_phantom01_untouched_all_strategies method method test_SM_22_phantom01_untouched_all_strategies L496–512
+ test_SM_23_phantom02_convergent_edit_all_strategies method method test_SM_23_phantom02_convergent_edit_all_strategies L514–534
+ test_SM_24_phantom05_both_changes_in_merged_snapshot_all_strategies method method test_SM_24_phantom05_both_changes_in_merged_snapshot_all_strategies L536–572
+ _addadd_repo function function _addadd_repo L177–195
+ _checkout function function _checkout L98–107
+ _clean_twobranch_repo function function _clean_twobranch_repo L215–230
+ _convergent_repo function function _convergent_repo L139–152
+ _deletemodify_repo function function _deletemodify_repo L198–212
+ _divergent_repo function function _divergent_repo L155–174
+ _env function function _env L32–33
+ _init_repo function function _init_repo L36–51
+ _make_commit function function _make_commit L60–95
+ _merged_snapshot function function _merged_snapshot L110–121
+ _untouched_repo function function _untouched_repo L124–136
+ _write_obj function function _write_obj L54–57
+ cli variable variable cli L25–25
+ CliRunner import import CliRunner L19–19
+ annotations import import annotations L12–12
+ blob_id import import blob_id L20–20
+ datetime import import datetime L14–14
+ fake_id import import fake_id L20–20
+ heads_dir import import heads_dir L22–22
+ json import import json L15–15
+ muse_dir import import muse_dir L22–22
+ pathlib import import pathlib L16–16
+ pytest import import pytest L18–18
+ ref_path import import ref_path L22–22
+ write_object import import write_object L21–21
+ runner variable variable runner L24–24
~ muse/cli/commands/merge.py .py 1 symbol modified

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:f02589f8e157757da430d82f35a64c0b7eee5033f6d13076ea395f9942151790 --body "your comment"