aws-samples / aws-samples/sample-autonomous-cloud-coding-agents

fix(agent): is_verify_command_inert misses mise's "unknown command" output — INERT build-gating warning never fires

Aperta Adatta ai principianti
#749 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
TypeScript
Stelle
143
Fork
46
Merge medio
3g 10h
PR unite (30g)
24

Descrizione

### 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:

```python
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:

1. `build_gate_inert` / lint-inert is set,
2. the "⚠️ Build-regression gating is INERT" note is appended and surfaced on the PR, and
3. `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`):

```console
$ 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:

```console
$ 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`:

```python
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.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia in agent/src/post_hooks.py, in is_verify_command_inert(), e riproduci alla lettera lo stderr di mise dell’issue. Controlla la gestione correlata in agent/src/repo.py, dove viene aggiunto l’avviso inert, quindi aggiungi un test di regressione che copra il codice di uscita e stderr; il lavoro è completo quando i casi inert di build e lint mostrano l’avviso ed evitano falsi fallimenti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
backend
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Tranquilla
Chiarezza
Specificata chiaramente
Idoneità per principianti
78/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.