From d4e718d533d76efdc2c5ad5092a1ab5f9c115b77 Mon Sep 17 00:00:00 2001 From: Yasyf Mohamedali Date: Fri, 2 Oct 2026 20:06:34 -0700 Subject: [PATCH] =?UTF-8?q?grants:=20=F0=9F=90=9B=20run=20the=20grant=20ju?= =?UTF-8?q?dge=20on=20the=20review=20specialty=20(gpt-6-luna=20low)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context: every capt-hook judge defaults to the review specialty, which serves gpt-6-luna at low effort. Summary: Judge now defaults to review instead of general; a test pins it to gpt-6-luna:low. Motivation: the general specialty served the Slack grant judge on Claude haiku, which refused an allowed alert-thread reply and failed structured output in replays. Details: an explicit specialty or model on a Judge still overrides the default. --- captain_hook/grants/judge.py | 2 +- tests/test_grants.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/captain_hook/grants/judge.py b/captain_hook/grants/judge.py index 362e6850..9f6efe91 100644 --- a/captain_hook/grants/judge.py +++ b/captain_hook/grants/judge.py @@ -95,7 +95,7 @@ class Judge: rules: str contexts: Sequence[PromptContext] = () model: TModel = "small" - specialty: TSpecialty = "general" + specialty: TSpecialty = "review" deadline: float = 20 transcript: bool | int | Literal["recent", "full"] = False root_transcript: bool | int | Literal["recent", "full"] = False diff --git a/tests/test_grants.py b/tests/test_grants.py index 45115743..5a7cf733 100644 --- a/tests/test_grants.py +++ b/tests/test_grants.py @@ -524,3 +524,10 @@ def test_linking_keeps_a_concurrent_revocation(tmp_path: Path) -> None: store.revoke(grant.id) linked = store.link(grant.id, "cc-slack", "daemon-1") assert linked.revoked is not None and linked.links == {"cc-slack": "daemon-1"} + + +def test_the_judge_runs_on_luna_at_low_effort() -> None: + from spawnllm import LlmBackends + + judge = Judge("rules") + assert LlmBackends.for_specialty(judge.specialty).resolve_model(judge.model) == "gpt-6-luna:low"