huskies: merge 757

This commit is contained in:
dave
2026-04-27 23:36:56 +00:00
parent dffa05d703
commit 7ee542dd1e
7 changed files with 571 additions and 177 deletions
@@ -144,15 +144,15 @@ async fn squash_merge_additive_conflict_both_additions_preserved() {
// Squash-merge the feature branch — conflicts because both appended to the same location.
let result = run_squash_merge(repo, "feature/story-238_additive", "238_additive").unwrap();
// Conflict must be detected and auto-resolved.
// Deterministic merge does NOT auto-resolve conflicts — AC3 requires failure.
assert!(result.had_conflicts, "additive conflict should be detected");
assert!(
result.conflicts_resolved,
"additive conflict must be auto-resolved; output:\n{}",
result.output
!result.conflicts_resolved,
"deterministic merge must NOT auto-resolve conflicts"
);
assert!(!result.success, "conflict must cause merge failure");
// Master must contain both additions without conflict markers.
// Master must not have been modified (merge aborted).
let content = fs::read_to_string(repo.join("module.rs")).unwrap();
assert!(
!content.contains("<<<<<<<"),
@@ -162,18 +162,6 @@ async fn squash_merge_additive_conflict_both_additions_preserved() {
!content.contains(">>>>>>>"),
"master must not contain conflict markers"
);
assert!(
content.contains("feature_fn"),
"feature branch addition must be preserved on master"
);
assert!(
content.contains("master_fn"),
"master branch addition must be preserved on master"
);
assert!(
content.contains("existing"),
"original function must be preserved"
);
// Cleanup: no leftover merge-queue branch or workspace.
let branches = Command::new("git")
@@ -262,25 +250,22 @@ async fn squash_merge_conflict_resolved_but_gates_fail_reported_as_failure() {
.output()
.unwrap();
// Squash-merge: conflict detected → auto-resolved → quality gates run → fail.
// Squash-merge: conflict detected → aborted immediately (no gate run).
let result = run_squash_merge(repo, "feature/story-238_gates_fail", "238_gates_fail").unwrap();
assert!(result.had_conflicts, "conflict must be detected");
assert!(
result.conflicts_resolved,
"additive conflict must be auto-resolved"
);
assert!(
!result.gates_passed,
"quality gates must fail (script/test exits 1)"
!result.conflicts_resolved,
"deterministic merge must NOT auto-resolve conflicts"
);
// Merge is aborted at conflict detection; gates are never reached.
assert!(
!result.success,
"merge must be reported as failed when gates fail"
"conflicting merge must be reported as failed"
);
assert!(
!result.output.is_empty(),
"output must contain gate failure details"
"output must contain conflict details"
);
// Master must NOT have been updated (cherry-pick was blocked by gate failure).