A judge that asks a model to reason about a change's blast radius.
excessibility owns the prompt, the response schema, and the parsing; the
host application supplies the model call as a completion function so the
library adds no HTTP dependency:
completion = fn prompt ->
# call Claude (or any model) with `prompt`, return its text
{:ok, response_text}
end
Excessibility.Review.Judge.LLM.judge(change, completion: completion)The function is resolved from opts[:completion] or
config :excessibility, :review_judge_completion. If none is configured,
or the call errors, or the output can't be parsed, this falls back to
Excessibility.Review.Judge.Heuristic — a missing/flaky model never
crashes a review.
The model is asked to reply with JSON:
{"tier":"auto|review|block","blast_radius":"...",
"risks":[{"severity":"...","area":"...","detail":"..."}],
"confidence":0.0}