diff --git a/bin/bullpen-grinder b/bin/bullpen-grinder index d9b4176..fcdd2e3 100755 --- a/bin/bullpen-grinder +++ b/bin/bullpen-grinder @@ -762,8 +762,19 @@ def serve(nick): # Explicit targets only when they look like real files; anything else is # left to grind()'s git-backed inference, which sees the actual repo. # Never offer a test file as a target — the grinder must not edit the spec. - targets = [t for t in re.findall(r"\b[\w-]+(?:/[\w.-]+)*/[\w.-]+\.\w+\b", body) - if not t.startswith("tests/") and t != test_rel] + # `bin/[\w.-]+` alternative: bullpen's own scripts (bin/bullpen-*) have NO + # dot-extension, so the base dir/dir/file.ext pattern alone can never match + # them — meaning a ticket fixing bullpen's own code couldn't auto-infer its + # own target. tmp/ and absolute paths are excluded (never real repo targets); + # inclusionai/ling excluded because research tickets quoting model names like + # "inclusionai/Ling-flash-2.0" look exactly like a dir/file target to this + # regex otherwise. (Recovered 2026-07-28: this fix existed only as an + # undeployed hand-patch on boltzmann's /usr/local/bin copy, never committed — + # merged back in when that staleness was found.) + targets = [t for t in re.findall(r"\b(?:bin/[\w.-]+|[\w-]+(?:/[\w.-]+)*/[\w.-]+\.\w+)\b", body) + if not t.startswith("tests/") and t != test_rel + and not t.startswith("tmp/") and not t.startswith("/") + and not t.startswith("inclusionai") and not t.startswith("ling")] reply = _remote_grind(body, test_rel, targets) review_reason = _auto_review_reason(reply) posted = False