phrase-judge · git:20260915.162059a · 2026-09-15 · sha256 d0692d55dacb790c

phrase-judge git:20260915.162059aA

Immutable. This exact content never changes and is served at /api/v1/blob/d0692d55dacb790c.

---
name: phrase-judge
description: >-
  Use when writing, fixing, or working around any checker, gate, or lint, in any
  repo, that decides based on what a text means.
---

# Phrase Judge

Use a phrase dictionary for any checker whose decision depends on the meaning
of prose. A checker declares that meaning in
`engine/hooks/llm-judge/phrases/<checker>.json`, then builds an llm-judge job
from that dictionary instead of owning its own prompt text.

Seed `match` and `not_match` with real pasted texts. When the checker misses a
reworded case, add that text to `match`. When it fires on harmless text, quoted
text, or negated text, add that text to `not_match`. Grow the dictionary from
real misses instead of writing a regex.

Use regex only for parsing fixed machine formats such as JSON fields, command
output labels, or file paths. Do not use a regex to decide whether free-form
prose means the checker's condition.

This holds in every repo, including checkers this repo does not own. When a
word or pattern list decides meaning, replace the decision: never trim, extend,
or reword around the list. Decide from typed inputs when they exist — declared
file lists, JSON fields, exit codes — as in Alexis King,
[Parse, don't validate](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/)
(2019). Where meaning still needs a judge but none can run, such as CI without
model access, the check reports unchecked and warns; it never passes silently.

The judge answers in the background. A dictionary checker never blocks the
agent's reply, and a hit reaches the agent later through the llm-judge inbox.