Skip to content

T-ROTD-hook-matcher-row-says-which-destinations-honour-it

State: closed/done · Impact: medium · Complexity: medium

The hook form’s Event row already says, per destination, what happens to the chosen event: “Dropped by opencode, amp, github-copilot, portable. gemini-cli fires on AfterTool.” The Matcher row says nothing of the kind. An author cannot tell from the form which destinations read a matcher at all, which translate the tool names, and which ignore them.

LocationRole today
solutions/determined/experiences/agent-pants/app/components/ApFieldSections.vue (matcher row)Description is only “Nothing named watches every tool call.” when the list is empty; no per-destination line
solutions/determined/experiences/agent-pants/app/utils/hookNote.ts hookToolNamesSuggestions are the union of every destination’s tools claims, so a name one harness drops is still offered
solutions/determined/experiences/agent-pants/app/utils/harnessGap.ts matcherCellThe gap table already computes a per-destination verdict for the whole matcher (honoured / translated / dropped / refused) from the same claims
packages/rust/agent-adapt/src/render/hooks_json.rsThe one hook renderer; a destination that reads no hooks.json (opencode, amp) refuses every hook, so its matcher is moot

The Matcher row carries the same kind of description as the Event row, computed from the chosen tools and the note’s destinations: which destinations honour the names as typed, which translate them (and to what), which drop a name, and which refuse hooks altogether so the matcher never reaches them. Empty stays “Nothing named watches every tool call.”

  1. Extract the per-destination matcher verdict from harnessGap.ts (matcherCell) into hookNote.ts so the form and the gap table share it.
  2. Render it as the Matcher row’s description, worded like the Event row’s hookEventNote.
  3. Unit tests in ApFieldSections.test.ts beside the Event row’s, one per verdict.
  • A matcher naming Edit with destinations claude, opencode and github-copilot reads: honoured by claude, translated by opencode (edit), refused by github-copilot (no hooks).
  • A name no destination knows is said to be dropped by all of them.
  • The gap table’s Matcher cell and the form’s description never disagree.

Found by the agent-pants bug survey, N-5LD4-bug-sweep-2026-09-12-agent-pants (the user’s review of the hook wizard on #2046).

Done in #2075.


← Back to Tasks