The genuine-conflict branch in applyPullActions resolves to `ours ?? theirs`, but the two stages where a side is ABSENT had NO test — the existing conflict tests only fed stages where both ours and theirs are non-null. This is the data-preservation core on the published `main`: a regression (dropping the `?? theirs`, or wrongly writing on both-null) would silently lose a surviving Docmost edit or resurrect a both-deleted page. Adds four tests: - apply-pull-actions.test.ts (fake-git, controlled stages): modify/delete (ours=null, theirs!=null -> keep THEIRS) and delete/delete (both null -> write nothing, deletion staged by commitMerge's `git add -A`). - pull-conflict-normalize.test.ts (real-git 3-way): modify/delete built by deleting on main + modifying on docmost (stage 2 absent -> theirs kept, committed clean, no markers); delete/delete built via a rename/rename(1to2) on the shared base file, which records the original path as both-deleted (stages 2 AND 3 absent -> nothing written, deletion committed off main). Production logic at pull.ts:487-497 held — pure test-coverage fix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
12 KiB
12 KiB