Quickstart: reproduce + verify (#4880)
Reproduce the corruption (pre-fix, MUST fail closed after the fix)
Set up a repo with .gitattributes mapping kitty-specs/**/acceptance-matrix.json to merge=spec-kitty-acceptance-matrix, then:
- base:
C1.pass_fail = "pending" - branch A:
C1.pass_fail = "fail" - main (ours):
C1.pass_fail = "pass"
git merge --no-edit A
Pre-fix (bug): exit 0, commits; the value becomes "<<<<<<< ours\n\"pass\"\n=======\n\"fail\"\n>>>>>>> theirs" and AcceptanceMatrix.from_dict(...).overall_verdict == "fail".
Post-fix (expected): the driver exits non-zero, git leaves the conflict, the merge aborts, nothing is committed.
Verify (unit level)
# IC-2 red-first: pre-fix product file → the repro fails; post-fix → passes
PWHEADLESS=1 .venv/bin/python -m pytest \
tests/specify_cli/cli/commands/test_row_aware_merge_driver.py \
tests/merge/test_gate_artifact_merge_drivers_2804.py -q
# IC-3 read guard
PWHEADLESS=1 .venv/bin/python -m pytest tests/specify_cli/acceptance -q
Run file-scoped (per the repo's narrow-run discipline), not a broad sweep.