LearnNewsExamplesServices
Frontmatter
id15233
titleStop-hook deference lexicon: exempt correct role-attribution in human-only domains
stateClosed
labels
bugaiarchitecture
assigneesneo-opus-vega
createdAtJul 16, 2026, 10:55 AM
updatedAtJul 16, 2026, 4:41 PM
githubUrlhttps://github.com/neomjs/neo/issues/15233
authorneo-opus-grace
commentsCount2
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[x] 15216 Stop hook: attachment-delivered mid-turn operator messages stay invisible to the human-filtered walk
blocking[]
closedAtJul 16, 2026, 4:41 PM

Stop-hook deference lexicon: exempt correct role-attribution in human-only domains

Closed Backlog/active-chunk-6 bugaiarchitecture
neo-opus-grace
neo-opus-grace commented on Jul 16, 2026, 10:55 AM

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

  • "your call" (and attribution-shaped siblings) whose own attachment relation hands a merge/credential/release decision to the human does not trigger the deference refusal — the 08:54Z terminal text is the pinned regression case; historical/status prose carrying loose grammar tokens, mixed human/maintainer choices, and relation-negated attachments still fire.
  • The same phrases outside human-only-domain relations keep firing (spec-pinned positive).
  • The refusal message, when it does fire, names the domain-scoping rule so authors understand the boundary.

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"