Component
Agent (Python runtime)
Describe the bug
is_verify_command_inert() (agent/src/post_hooks.py:77-99) fails to recognise mise's actual "task does not exist" phrasing, so a repository with no mise.toml at all is never classified as inert.
The most damaging consequence is not the wrong build_passed/lint_passed value — it is that the operator-facing warning at agent/src/repo.py:517-526 never fires:
if not config.build_command and is_verify_command_inert(result.returncode, result.stderr):
build_gate_inert = True
notes.append(
"⚠️ Build-regression gating is INERT: no runnable `mise run build` task ..."
)
Because the detector returns False, that note is never appended. A repo onboarded with no pipeline.buildCommand and no mise.toml therefore gets build-regression gating silently disabled with no warning to anyone — precisely the failure mode the warning exists to prevent.
Expected behavior
mise run build / mise run lint in a repo with no mise.toml should be detected as inert, so that:
build_gate_inert / lint-inert is set,
- the "⚠️ Build-regression gating is INERT" note is appended and surfaced on the PR, and
build_passed / lint_passed reflect inert-treated-as-passing rather than a bogus red.
Current behavior
The detector returns False, no inert warning is emitted, and lint_passed is persisted as false on every task against such a repo.
Reproduction steps
In any checkout with no mise.toml (e.g. a clone of aws-samples/sample-semantic-layer-structured):
$ mise run lint; echo "EXIT=$?"
mise ERROR unknown command: lint
Did you mean:
mise install-into
mise plugin-list
mise ERROR Version: 2026.8.4 macos-arm64
EXIT=1
Then feed that verbatim to the detector:
$ python3 -c "
import sys; sys.path.insert(0,'agent/src')
from post_hooks import is_verify_command_inert
print(is_verify_command_inert(1, 'mise ERROR unknown command: lint'))"
False
The heuristics check exit 127, "no tasks defined", "no task named", "mise" + "not found", and "command not found". Real mise emits unknown command with exit 1, matching none of them.
Observed in practice on task 01KZS7NFB480DGF2A6FZ5N3CZD and 01KZS86KNZPVK8FZXX757ADZ8S (both lint_passed=false, no inert note on the PR).
Possible solution
Add mise's real phrasing to the heuristic list in is_verify_command_inert:
or "unknown command" in s
Worth reviewing the full set of mise task-missing messages across versions rather than adding one string, and adding a regression test that feeds the verbatim stderr above. Note the mise version string is included in that stderr, so a test fixture should not match on version.
Related: the same detector is used for the post-agent gate in agent/src/post_hooks.py and for the lint inert path, so build and lint inert handling are both affected by the single missed match.
Component
Agent (Python runtime)
Describe the bug
is_verify_command_inert()(agent/src/post_hooks.py:77-99) fails to recognise mise's actual "task does not exist" phrasing, so a repository with nomise.tomlat all is never classified as inert.The most damaging consequence is not the wrong
build_passed/lint_passedvalue — it is that the operator-facing warning atagent/src/repo.py:517-526never fires:Because the detector returns
False, that note is never appended. A repo onboarded with nopipeline.buildCommandand nomise.tomltherefore gets build-regression gating silently disabled with no warning to anyone — precisely the failure mode the warning exists to prevent.Expected behavior
mise run build/mise run lintin a repo with nomise.tomlshould be detected as inert, so that:build_gate_inert/ lint-inert is set,build_passed/lint_passedreflect inert-treated-as-passing rather than a bogus red.Current behavior
The detector returns
False, no inert warning is emitted, andlint_passedis persisted asfalseon every task against such a repo.Reproduction steps
In any checkout with no
mise.toml(e.g. a clone ofaws-samples/sample-semantic-layer-structured):Then feed that verbatim to the detector:
The heuristics check exit
127,"no tasks defined","no task named","mise"+"not found", and"command not found". Real mise emitsunknown commandwith exit 1, matching none of them.Observed in practice on task
01KZS7NFB480DGF2A6FZ5N3CZDand01KZS86KNZPVK8FZXX757ADZ8S(bothlint_passed=false, no inert note on the PR).Possible solution
Add mise's real phrasing to the heuristic list in
is_verify_command_inert:Worth reviewing the full set of mise task-missing messages across versions rather than adding one string, and adding a regression test that feeds the verbatim stderr above. Note the mise version string is included in that stderr, so a test fixture should not match on version.
Related: the same detector is used for the post-agent gate in
agent/src/post_hooks.pyand for the lint inert path, so build and lint inert handling are both affected by the single missed match.