Context (observed running the pb#91/92/93 batch, 2026-07-23)
vera's verdicts (PASS/WARN/FAIL) are the shop's merge gate, but the loop has no native reaction to an adverse review — review_gate is a separate opt-in reviewer (the host's own code-review workflow), not a consumer of the PR-review pipeline's verdicts. When #94 came back FAIL and #95's WARN was adjudicated fix-now, the fix rounds had to be driven by the operator from outside:
- Requeue lever is a repurposed CI route.
POST /features/{fid}/ci {passed:false} was the only path that requeues onto the same PR — it works (and the ladder-escalation is actually a nice fit for fix rounds), but it records the round as ci-fail and burns an escalation tier per round even when the tier isn't the problem.
- The agent can't requeue itself.
board_mark_ready only does backlog→ready; from in_review there is no agent-tool transition. The lead correctly refused to improvise, but that means every fix round needs operator hands.
- The agent can't READ a feature's current text.
board_update_feature writes acceptance_criteria wholesale, but no tool returns the current value — a safe append (e.g. "add fix item 8, keep rounds 1-7") is impossible agent-side. The operator had to GET /api/plugins/project_board/features/{fid} and hand the agent verbatim replacement text. (A race followed: the requeue fired before the brief update, and the coder dispatched on the stale brief.)
Proposed
POST /features/{fid}/review (or extend /ci with a kind: review field): record an adverse-review bounce distinctly from ci-fail, requeue onto the same PR, optional escalate: bool (default false — fix rounds usually need the findings, not a bigger model), and accept a findings payload that lands in the re-dispatch prompt the way _ci_feedback does.
board_get_feature(id) agent tool returning the full feature (spec, acceptance_criteria, state, pr_url) — unlocks safe read-modify-write and makes the lead self-sufficient for fix rounds.
- Optional follow-on: a webhook/poll seam that maps the QA panel's
CHANGES_REQUESTED/verdict marker to the review bounce automatically, so adverse verdicts requeue without any operator at all.
Refs
The #94 (FAIL→WARN→merge) and #95 (WARN→fix-now→merge) fix-round transcripts; #85 (update tool), #22/pr-reviewer (WARN promotion) for why verdict-awareness matters.
Context (observed running the pb#91/92/93 batch, 2026-07-23)
vera's verdicts (PASS/WARN/FAIL) are the shop's merge gate, but the loop has no native reaction to an adverse review —
review_gateis a separate opt-in reviewer (the host's own code-review workflow), not a consumer of the PR-review pipeline's verdicts. When #94 came back FAIL and #95's WARN was adjudicated fix-now, the fix rounds had to be driven by the operator from outside:POST /features/{fid}/ci {passed:false}was the only path that requeues onto the same PR — it works (and the ladder-escalation is actually a nice fit for fix rounds), but it records the round asci-failand burns an escalation tier per round even when the tier isn't the problem.board_mark_readyonly does backlog→ready; fromin_reviewthere is no agent-tool transition. The lead correctly refused to improvise, but that means every fix round needs operator hands.board_update_featurewritesacceptance_criteriawholesale, but no tool returns the current value — a safe append (e.g. "add fix item 8, keep rounds 1-7") is impossible agent-side. The operator had to GET/api/plugins/project_board/features/{fid}and hand the agent verbatim replacement text. (A race followed: the requeue fired before the brief update, and the coder dispatched on the stale brief.)Proposed
POST /features/{fid}/review(or extend/ciwith akind: reviewfield): record an adverse-review bounce distinctly from ci-fail, requeue onto the same PR, optionalescalate: bool(default false — fix rounds usually need the findings, not a bigger model), and accept afindingspayload that lands in the re-dispatch prompt the way_ci_feedbackdoes.board_get_feature(id)agent tool returning the full feature (spec, acceptance_criteria, state, pr_url) — unlocks safe read-modify-write and makes the lead self-sufficient for fix rounds.CHANGES_REQUESTED/verdict marker to the review bounce automatically, so adverse verdicts requeue without any operator at all.Refs
The #94 (FAIL→WARN→merge) and #95 (WARN→fix-now→merge) fix-round transcripts; #85 (update tool), #22/pr-reviewer (WARN promotion) for why verdict-awareness matters.