Skip to content

porch: a consult that RAN but returned no VERDICT is treated as REQUEST_CHANGES (should be a non-blocking skip) — causes review-loop churn #1033

@waleedkadous

Description

@waleedkadous

Problem

In porch's review loop, when a consult lane runs but returns no parseable VERDICT, porch defaults that to REQUEST_CHANGES. Combined with a lane that can't produce a verdict (see companion: the agy/Gemini lane going off-task), this drives the review loop to iterate until max_iterations even when every working reviewer has APPROVE'd — pure churn (≈ iterations × N consults wasted per phase).

The lane-unavailable case is already handled gracefully: a missing/unauthenticated lane skips non-blockingly. The gap is the ran-but-no-verdict case — it should be treated the same as a non-blocking skip (the reviewer effectively abstained), not as a substantive REQUEST_CHANGES.

Repro (spir-987, phase_1, 2026-06-11/12)

  • Codex: APPROVE. Claude: APPROVE. build + 5 tests green.
  • Gemini (agy): iter1 timed out → skipped (correct, non-blocking). iter2 ran but off-task → no VERDICT → porch scored it REQUEST_CHANGES → loop. Reached iter3 of max_iterations=8 with nothing actually wrong.

Expected

  • A consult that ran but produced no parseable verdict → treat as a non-blocking abstention/skip (log it, don't count it as REQUEST_CHANGES), matching the unavailable-lane behavior.
  • Only an explicit REQUEST_CHANGES (with findings) should block / drive another iteration.
  • Optionally: surface "lane X abstained: no verdict parsed" in the consult log so it's visible, not silent.

Impact

Without this, one misbehaving lane can burn the full max_iterations budget on every phase even when consensus among working reviewers is APPROVE. Companion to the agy-off-task consult bug (filed alongside). Distinct from #753 (Codex false-alarm content) — this is about absent verdicts, not wrong ones.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/porchArea: Porch state machine / protocol orchestrationbugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions