The launch-proof dogfood (hyrule-cloud#28 → PR #29) exposed a gate-fidelity gap: the loop's gate_execution node reported passed, but the diff actually failed both ruff (unused import) and mypy (2 type errors) when run the way the repo's CI does.
Root cause
Target repos expose their linters via an extra/group, not the base venv (hyrule-cloud: uv run --extra dev ruff/mypy ...; CI uses --extra dev). The loop's gate run invokes the bare tool, so ruff/mypy are not found and the gate effectively only runs what's importable — yielding a false "passed". A coding agent then opens a draft PR that fails the real branch-protection checks (caught only by human review).
Ask
- Run gate commands with the target repo's dev dependencies available (e.g. resolve and use
--extra dev / the repo's dependency group), so ruff/mypy/pytest actually execute.
- Treat tool-not-found / non-zero spawn as a gate failure, never a pass — a gate that cannot run is not a gate that passed.
- (Related) surface the gate command output in the run trace so false passes are visible.
Evidence
PR #29 reported gates green from the loop; locally uv run --extra dev ruff check . + mypy found 3 issues (1 unused import, 2 object→str coercions). Fixed by hand to land the PR.
The launch-proof dogfood (hyrule-cloud#28 → PR #29) exposed a gate-fidelity gap: the loop's
gate_executionnode reported passed, but the diff actually failed bothruff(unused import) andmypy(2 type errors) when run the way the repo's CI does.Root cause
Target repos expose their linters via an extra/group, not the base venv (hyrule-cloud:
uv run --extra dev ruff/mypy ...; CI uses--extra dev). The loop's gate run invokes the bare tool, soruff/mypyare not found and the gate effectively only runs what's importable — yielding a false "passed". A coding agent then opens a draft PR that fails the real branch-protection checks (caught only by human review).Ask
--extra dev/ the repo's dependency group), soruff/mypy/pytestactually execute.Evidence
PR #29 reported gates green from the loop; locally
uv run --extra dev ruff check .+mypyfound 3 issues (1 unused import, 2object→strcoercions). Fixed by hand to land the PR.