Context
Live false positive, 2026-07-16 ~08:54Z: the stop-hook's deference-phrase layer refused a turn-terminal on the trigger deference phrase "your call" at turn-terminal. The flagged phrase was applied to a merge decision — "merge on the exception or ask for the stamp, your call" — in a terminal that had just flagged a CI-green, formally-approved PR as merge-eligible.
The Problem
The deference lexicon cannot distinguish two opposite postures that share surface phrasing:
- Helpful-assistant regression (the real target): handing a peer/operator a decision the agent should own — "would you like me to…", "your call" on a lane choice, an architecture verdict, a review disposition.
- Correct role-attribution (a REQUIRED posture): naming a decision as the human's in the domains the substrate itself defines as strictly human-owned. The AGENTS.md firewall's own Tier-4 enumerates them — merge execution (critical gate #1), credentials, release direction, subjective aesthetics. At the merge gate, "your call" / "your gate" / "yours to merge" is the protocol, not a slip: an agent claiming or hedging that decision would be the actual violation.
Lexicon-only matching converts the second class into refusals — which pressures agents toward the worse behavior of not naming the human gate (hedged prose that obscures who decides) to dodge the phrase list.
The Architectural Reality
- The deference layer lives in the
decideDeferenceStopHookAction path (.claude/hooks/laneStateStopHook.mjs + shared primitives in ai/scripts/lifecycle/stopHookDecision.mjs; the hold-costume lexicon scanHoldLexicon is the sibling pattern).
- The exemption signal is textual and local to the flagged phrase — but it is a RELATION, not co-occurrence: the phrase's own object (
your call on the merge) or the grammar immediately governing its predicate (copular ownership, an all-human option list, pending-eligibility) must hand the human-gate decision to the human. A human-domain noun elsewhere in the clause (a merge that landed, a release that is live) is historical fact, not decision attribution. Regression-deference typically attaches to lanes, reviews, designs, or open-ended "what next" constructions.
The Fix
Bind the exemption to the decision RELATION, not token presence (contract sharpened across four review cycles on the implementing PR): only attribution-shaped phrases (your call / your move / Your steer on) are exemption-eligible — offer-shaped phrases propose agent execution and always fire. The decisive segment is the phrase's own attachment — object when present, else immediate predicate — with no wider clause-window fallback. Object form: the eligible phrase itself supplies the possessive attribution, so it exempts exactly when the object names purely human-gate work (Your call on the merge., punctuation equivalents included); mixed human/maintainer continuations and unenumerated tasks fire. Predicate form: the grammar must actually govern the human-gate decision — copular ownership (the merge is yours / your decision / your gate), an all-human option list (merge on the exception or ask for the stamp), or copular pending-eligibility (is merge-eligible); historical or status prose carrying loose tokens (you merged it yesterday, the merge landed either way) hands no decision and fires. Negation is relation-scoped: it cancels the attribution only inside the relation that supplies it (the merge isn't yours fires, both apostrophe forms), never from an unrelated proposition (the merge is yours though CI is not green still exempts). Seed vocabulary: merge(s/d/-eligible), squash, credential(s), release, stamp — from the firewall's Tier-4 enumeration. Everything else keeps current semantics. Mirror the existing lexicon-testing shape in the spec: positives (bare "your call" on a lane/review → still fires), negatives (merge-relation "your call" → exempt), and the live 08:54Z terminal as the regression fixture.
Acceptance Criteria
Out of Scope
- The hold-costume lexicon (separate tripwire, different failure mode).
- Any change to the no-hold L3 semantics or the operator-visibility walk (#15216 lineage).
Decision Record impact
none (implements the firewall's existing Tier-4 domain enumeration; no new authority).
Related
#14440 lineage (the hook's operator-visibility fixes) · #15216 / PR #15222 (attachment walk, in review) · the hook's own friction→gold clause instructing exactly this filing. Live trigger terminal: this session, 08:54Z, following the PR #15232 merge-eligibility flag.
Live latest-open sweep: checked latest 10 open issues at 2026-07-16 ~08:55Z; no equivalent found. A2A in-flight claim sweep: current claims all disjoint (stop-hook substrate lanes: Vega #15216/PR #15222 in CR-cycle — this is a sibling leaf, not her scope).
Origin Session ID: 75ed6708-c66b-4989-862d-2286e87abbf1
Retrieval Hint: "stop hook deference lexicon your call merge gate role attribution exemption"
Context
Live false positive, 2026-07-16 ~08:54Z: the stop-hook's deference-phrase layer refused a turn-terminal on the trigger
deference phrase "your call" at turn-terminal. The flagged phrase was applied to a merge decision — "merge on the exception or ask for the stamp, your call" — in a terminal that had just flagged a CI-green, formally-approved PR as merge-eligible.The Problem
The deference lexicon cannot distinguish two opposite postures that share surface phrasing:
Lexicon-only matching converts the second class into refusals — which pressures agents toward the worse behavior of not naming the human gate (hedged prose that obscures who decides) to dodge the phrase list.
The Architectural Reality
decideDeferenceStopHookActionpath (.claude/hooks/laneStateStopHook.mjs+ shared primitives inai/scripts/lifecycle/stopHookDecision.mjs; the hold-costume lexiconscanHoldLexiconis the sibling pattern).your call on the merge) or the grammar immediately governing its predicate (copular ownership, an all-human option list, pending-eligibility) must hand the human-gate decision to the human. A human-domain noun elsewhere in the clause (a merge that landed, a release that is live) is historical fact, not decision attribution. Regression-deference typically attaches to lanes, reviews, designs, or open-ended "what next" constructions.The Fix
Bind the exemption to the decision RELATION, not token presence (contract sharpened across four review cycles on the implementing PR): only attribution-shaped phrases (
your call/your move/Your steer on) are exemption-eligible — offer-shaped phrases propose agent execution and always fire. The decisive segment is the phrase's own attachment — object when present, else immediate predicate — with no wider clause-window fallback. Object form: the eligible phrase itself supplies the possessive attribution, so it exempts exactly when the object names purely human-gate work (Your call on the merge., punctuation equivalents included); mixed human/maintainer continuations and unenumerated tasks fire. Predicate form: the grammar must actually govern the human-gate decision — copular ownership (the merge is yours / your decision / your gate), an all-human option list (merge on the exception or ask for the stamp), or copular pending-eligibility (is merge-eligible); historical or status prose carrying loose tokens (you merged it yesterday,the merge landed either way) hands no decision and fires. Negation is relation-scoped: it cancels the attribution only inside the relation that supplies it (the merge isn't yoursfires, both apostrophe forms), never from an unrelated proposition (the merge is yours though CI is not greenstill exempts). Seed vocabulary:merge(s/d/-eligible),squash,credential(s),release,stamp— from the firewall's Tier-4 enumeration. Everything else keeps current semantics. Mirror the existing lexicon-testing shape in the spec: positives (bare "your call" on a lane/review → still fires), negatives (merge-relation "your call" → exempt), and the live 08:54Z terminal as the regression fixture.Acceptance Criteria
Out of Scope
Decision Record impact
none (implements the firewall's existing Tier-4 domain enumeration; no new authority).
Related
#14440lineage (the hook's operator-visibility fixes) · #15216 / PR #15222 (attachment walk, in review) · the hook's own friction→gold clause instructing exactly this filing. Live trigger terminal: this session, 08:54Z, following the PR #15232 merge-eligibility flag.Live latest-open sweep: checked latest 10 open issues at 2026-07-16 ~08:55Z; no equivalent found. A2A in-flight claim sweep: current claims all disjoint (stop-hook substrate lanes: Vega #15216/PR #15222 in CR-cycle — this is a sibling leaf, not her scope).
Origin Session ID: 75ed6708-c66b-4989-862d-2286e87abbf1
Retrieval Hint: "stop hook deference lexicon your call merge gate role attribution exemption"