Observed while babysitting PR #528 (worker tier, 3 cascading codex re-review rounds).
Friction
After a worker pushes a fix and the fix commit goes green in CI, it must decide: merge now, or wait because another re-review may surface a new finding. There is no deterministic "re-review settled" signal, and the two review backends behave differently:
- When codex HAS a finding it posts a PR review record (
pulls/<pr>/reviews, state COMMENTED) plus an inline comment — detectable by polling reviews for one whose commit_id == head.
- When codex is CLEAN it posts no review record; per its own About text it "will react with 👍" — i.e. a reaction on the PR issue (
issues/<pr>/reactions, content=+1, user=chatgpt-codex-connector[bot]). A worker polling pulls/<pr>/reviews for a head-SHA review therefore waits indefinitely for a signal that never arrives, and cannot distinguish "still reviewing" from "reviewed, no findings".
There is also no per-commit correlation on the clean path: the 👍 is on the issue, not tied to a commit SHA — the worker must infer "clean for head" from the reaction created_at being after the head push time.
Impact
Worker-tier autopilot (auto-fix + gate-merge) needs to know when a re-review round is DONE to avoid either (a) merging into a pending finding, or (b) hanging on a review that will never post. Currently this is left to ad-hoc timing heuristics per worker.
Suggested direction
A shared helper (or an addition to the merge-gate / readiness surface) that reports a bot re-review as "settled" for the current head when EITHER a head-SHA review record exists OR a bot 👍 reaction on the PR issue post-dates the head-commit push time — normalizing the finding vs. clean signals across review backends (codex, claude[bot], cursor). Encode the backend-specific quirk (review record vs. issue reaction) once, so workers stop reimplementing timing heuristics.
Repro context
Category: improvement / operational.
Observed while babysitting PR #528 (worker tier, 3 cascading codex re-review rounds).
Friction
After a worker pushes a fix and the fix commit goes green in CI, it must decide: merge now, or wait because another re-review may surface a new finding. There is no deterministic "re-review settled" signal, and the two review backends behave differently:
pulls/<pr>/reviews, stateCOMMENTED) plus an inline comment — detectable by polling reviews for one whosecommit_id== head.issues/<pr>/reactions,content=+1,user=chatgpt-codex-connector[bot]). A worker pollingpulls/<pr>/reviewsfor a head-SHA review therefore waits indefinitely for a signal that never arrives, and cannot distinguish "still reviewing" from "reviewed, no findings".There is also no per-commit correlation on the clean path: the 👍 is on the issue, not tied to a commit SHA — the worker must infer "clean for head" from the reaction
created_atbeing after the head push time.Impact
Worker-tier autopilot (auto-fix + gate-merge) needs to know when a re-review round is DONE to avoid either (a) merging into a pending finding, or (b) hanging on a review that will never post. Currently this is left to ad-hoc timing heuristics per worker.
Suggested direction
A shared helper (or an addition to the merge-gate / readiness surface) that reports a bot re-review as "settled" for the current head when EITHER a head-SHA review record exists OR a bot 👍 reaction on the PR issue post-dates the head-commit push time — normalizing the finding vs. clean signals across review backends (codex, claude[bot], cursor). Encode the backend-specific quirk (review record vs. issue reaction) once, so workers stop reimplementing timing heuristics.
Repro context
d726a8b: clean round-4 review surfaced ONLY asissues/528/reactions+1at 2026-07-19T18:35:59Z (push was 18:33:15Z);pulls/528/reviewscount stayed at 3.Category: improvement / operational.