Development record
The implement loop's lane sync merge (`git merge --no-ff` through `pickGit`) runs a repository-configured merge driver, which executes as the operator and writes the merge result git keeps, although the loop presents this merge as running no hook code.
The implement loop's lane sync merge (git merge --no-ff through pickGit) runs a repository-configured merge driver, which executes as the operator and writes the merge result git keeps, although the loop presents this merge as running no hook code.
Private security advisory GHSA-486x-8h9p-pq5x (draft, severity medium). Full text, evidence and reproduction: the security-drain-2026-10-09 run directory in the main checkout's local tier. This record stays uncommitted until its fix lands; the fix commit adds it directly to resolved/.
Evidence (lines at main 7549ca2d5): syncLane (internal/core/implement/loop/sync.go:66) merges with pickGit(lane.Worktree, "merge", "--no-ff", "--no-edit", "-m", msg, merged) (internal/core/implement/loop/sync.go:95). pickGit pins hooks, fsmonitor and quotePath and runs under ScrubbedEnv, so repo and global config stay (internal/core/implement/loop/pickcommit.go:71). landStage calls syncLane only while lane.Landing is nil (internal/core/implement/loop/land.go:131, :139). The other side can come from a planted refs/remotes/origin/<default>; no network remote is needed.
Reproduction: on git 2.39.5, set .git/info/attributes to * merge=evil (or a committed .gitattributes) and merge.evil.driver to a script; point refs/remotes/origin/<default> at a commit editing a file the lane also edits; run abcd implement step until the lane reaches syncLane with no landing. The script runs, git reports success and the worktree file holds the script's output; the post-merge hook does not run. With no overlapping change the driver does not start.
Frontmatter
| id | iss-2610090821510097 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610090821510097-implement-sync-merge-runs-repo-merge.md
open on GitHub ↗ · commit history ↗
mentions1
- iss-2610111549593667The sync merge fails on git older than 2.44 (Apple Git 2.39.5) when an attribute selects a merge driver: BuiltinMergeDriver, the merge-file command that replaces every repository merge driver (iss-2610090821510097), passes --diff-algorithm=histogram, which merge-file only accepts from git 2.44, so git merge exits 1 with "unknown option 'diff-algorithm=histogram'" even on a clean merge. The repository's driver still does not start and the merge.default case passes. Reported as GitHub issue #894, pinned at 3b8700ef7.