From c788a775240612942a66a602b47d175c1c1ce534 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Thu, 29 Oct 2026 21:03:59 -0400 Subject: [PATCH 1/3] fix(repo): merge the em-dash and shared-copies line lists with git's union driver scripts/em-dash-purged-paths.txt and scripts/shared-copies.txt conflict on most concurrent pull requests, and every resolution is the union of both sides. Neither list's order carries meaning, and each list's gate fails what a bad union can leave behind (a stale entry, a duplicate, a missing copy), so git's built-in union driver resolves them. Co-Authored-By: Claude Opus 5.5 --- .gitattributes | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.gitattributes b/.gitattributes index 78f0bceb77..d03127da63 100644 --- a/.gitattributes +++ b/.gitattributes @@ -41,6 +41,18 @@ package-lock.json -diff packages.lock.json -diff *.lock -diff +############################################################################### +# Line-list registries: git's built-in union driver keeps both sides' lines +# instead of conflicting. Only lists whose order carries no meaning and whose +# gate fails what a bad union can leave behind, such as a line one side removed. +############################################################################### + +# Gate: scripts/check-purged-em-dashes.sh fails a stale entry. +scripts/em-dash-purged-paths.txt merge=union +# Gate: scripts/sync-shared-copies.sh --check fails a duplicate, a missing +# canonical, or a registered copy that is missing. +scripts/shared-copies.txt merge=union + ############################################################################### # Binary: no line-ending conversion, no diff. ############################################################################### From c2d7e2cb9a9908eccf6e84be0b3d121f693234fd Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Thu, 29 Oct 2026 22:46:50 -0400 Subject: [PATCH 2/3] fix(repo): move the union-merge attributes to scripts/.gitattributes The root .gitattributes syncs from melodic-software/standards, and pr-check-managed-files rejects a hand edit to it. Git reads a nested .gitattributes for the paths below it, so the two line lists get merge=union from scripts/.gitattributes instead. Co-Authored-By: Claude Opus 5.5 --- .gitattributes | 12 ------------ scripts/.gitattributes | 11 +++++++++++ 2 files changed, 11 insertions(+), 12 deletions(-) create mode 100644 scripts/.gitattributes diff --git a/.gitattributes b/.gitattributes index d03127da63..78f0bceb77 100644 --- a/.gitattributes +++ b/.gitattributes @@ -41,18 +41,6 @@ package-lock.json -diff packages.lock.json -diff *.lock -diff -############################################################################### -# Line-list registries: git's built-in union driver keeps both sides' lines -# instead of conflicting. Only lists whose order carries no meaning and whose -# gate fails what a bad union can leave behind, such as a line one side removed. -############################################################################### - -# Gate: scripts/check-purged-em-dashes.sh fails a stale entry. -scripts/em-dash-purged-paths.txt merge=union -# Gate: scripts/sync-shared-copies.sh --check fails a duplicate, a missing -# canonical, or a registered copy that is missing. -scripts/shared-copies.txt merge=union - ############################################################################### # Binary: no line-ending conversion, no diff. ############################################################################### diff --git a/scripts/.gitattributes b/scripts/.gitattributes new file mode 100644 index 0000000000..4895f48abf --- /dev/null +++ b/scripts/.gitattributes @@ -0,0 +1,11 @@ +# Line-list registries: git's built-in union driver keeps both sides' lines +# instead of conflicting. Only lists whose order carries no meaning and whose +# gate fails what a bad union can leave behind, such as a line one side removed. +# This file, not the root .gitattributes, holds them: the root one syncs from +# melodic-software/standards. + +# Gate: check-purged-em-dashes.sh fails a stale entry. +em-dash-purged-paths.txt merge=union +# Gate: sync-shared-copies.sh --check fails a duplicate, a missing canonical, +# or a registered copy that is missing. +shared-copies.txt merge=union From ee1f8db01f3783fcfe36837c33f5510f3b0fed2c Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Thu, 29 Oct 2026 22:47:30 -0400 Subject: [PATCH 3/3] test(repo): record scripts/.gitattributes as covered by no shell suite Like the root .gitattributes, it is repository configuration git reads on every merge; no *.test.sh covers it. Co-Authored-By: Claude Opus 5.5 --- scripts/affected-tests-no-suite.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/affected-tests-no-suite.txt b/scripts/affected-tests-no-suite.txt index c19ba09a32..513145b843 100644 --- a/scripts/affected-tests-no-suite.txt +++ b/scripts/affected-tests-no-suite.txt @@ -73,6 +73,7 @@ # entry here. .github/* .gitattributes +scripts/.gitattributes .gitignore .gitleaksignore .lycheeignore