From bd350bd4afe0a29158e4e681b09b9de90493f67c Mon Sep 17 00:00:00 2001 From: Aaron Sachs <898627+asachs01@users.noreply.github.com> Date: Fri, 4 Sep 2026 12:38:54 +0000 Subject: [PATCH] docs(claude): diff3 fabricates a false-clean merge on the NUL-sentinel file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extending the 2026-08-26 NUL-byte entry: GNU diff3 on extracted blobs of src/cli/bus.ts silently dropped one side's real changes and reported a clean 0-conflict merge, worse than the grep/rg false-zero shapes already documented since it hands back a confident wrong result instead of an absence. git merge-file / git merge-tree are unaffected — use those for any 3-way check on this file. Co-Authored-By: Claude Sonnet 5 --- CLAUDE.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 3e749c6576..e0b7478827 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1324,3 +1324,16 @@ acts.** This section is the fix; the write-up that noticed the problem was not. Same false-zero family as the 08-17 seven-zeros table: the miss is silent, the rc is clean, and the hidden file is exactly the CLI file most sweeps target. A fleet broadcast went out same night; this entry is the boot-loaded copy. +- **ADDENDUM 2026-09-04 (murph) — the NUL sentinel also breaks GNU `diff3`, and worse than the + grep/rg misses above: it doesn't return a false zero, it FABRICATES a false-clean 3-way merge.** + Diagnosing a real conflict on `src/cli/bus.ts` (cortextos#151 vs main), extracted the three blobs + (base/ours/theirs) to plain files and ran `diff3 -m` — exit 0, zero conflict markers, read as "no + overlap, safe to auto-merge." The merged output had silently DROPPED the entire PR side's changes + (`listAgents` import, new `validateAssigneeArg` function, both call sites — verified via direct + byte-level python3 check, not grep, since the wrapper bug covers this file too). `git merge-file` + (git's actual merge algorithm, not GNU diff3) on the same three files correctly produced the real + conflict markers. **Apply: for any 3-way merge/conflict check on a file that might carry this NUL + sentinel (`bus.ts` today, any future NUL-carrying file), use `git merge-file` or `git merge-tree`, + never GNU `diff3` on extracted blobs — a silent false-zero is bad, a tool that hands back a + confident, mergeable-looking, WRONG result is worse, because there is no failed-lookup shape to + notice.**