fix(hooks): run the barrier on merges, where the markers come from - #3319
Merged
Conversation
gHashTag
enabled auto-merge (squash)
September 5, 2026 18:11
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
This was referenced Sep 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #3318
Measured, git 2.50.1, marker hooks over five commit-creating events:
pre-commitcommit-msg--amend--allow-emptymerge --no-ffcherry-pickEvery gate in
tri hooks pre-commit— the conflict-marker refusal above all — was silent on the one commit type conflict markers actually come from.git mergerunspre-merge-commit, and a non-zero exit stops the merge; verified, HEAD stayed on the pre-merge commit. The index at that moment holds the merge RESULT, which is exactly the operand the barrier reads since #3302 corrected it to--staged.Controls, both sides. A merge whose result carries a marker exits 1, prints
carries a conflict marker, and does not happen. A clean merge exits 0 and does.cherry-pickruns neither hook and git offers none that could stop it. Stated as a known gap rather than papered over.The class is the population of EVENTS — not the predicate, not the operand. Yesterday it was a push that could be a deletion (#3309); today a commit that could be a merge. Both found by asking "what else comes through here", neither by any control.