Objections go back to the worker, with the review attached #53

Closed
opened 2026-10-14 20:30:58 +00:00 by teahubxyz · 4 comments
Owner

When the reviewer objects, Time says "Over to a human (or comment /time retry to send it back to the worker)". But a retry restarts the worker from the card body alone, so it never sees the objection, and it then fails on open_pr because a PR for the branch is already open. This is the revise loop the factory is missing: a worker should be able to answer a review the way it answers a card.

  • On /time retry while the card's PR is open, add the latest review comment(s) on that PR to the worker's instructions (marked as the reviewer's, not the operator's), and have it work on the same branch.
  • open_pr when a PR for the branch is already open: update that PR's body with what changed and return its number, instead of failing.
  • After the worker pushes, the card goes back to dispatched, so the next beat reviews the PR again and the new verdict is the one that counts.
  • Checks in test_time.py for: a retry after an objection hands the review text to the worker; open_pr on an open PR updates it; a re-review after the push replaces the old verdict.

Depends on #52

DONE: PR open; the new checks pass; CI green.

When the reviewer objects, Time says "Over to a human (or comment `/time retry` to send it back to the worker)". But a retry restarts the worker from the card body alone, so it never sees the objection, and it then fails on `open_pr` because a PR for the branch is already open. This is the revise loop the factory is missing: a worker should be able to answer a review the way it answers a card. - On `/time retry` while the card's PR is open, add the latest review comment(s) on that PR to the worker's instructions (marked as the reviewer's, not the operator's), and have it work on the same branch. - `open_pr` when a PR for the branch is already open: update that PR's body with what changed and return its number, instead of failing. - After the worker pushes, the card goes back to `dispatched`, so the next beat reviews the PR again and the new verdict is the one that counts. - Checks in `test_time.py` for: a retry after an objection hands the review text to the worker; `open_pr` on an open PR updates it; a re-review after the push replaces the old verdict. Depends on #52 DONE: PR open; the new checks pass; CI green.
teahubxyz added the queued label 2026-10-14 20:30:58 +00:00
time added ready and removed queued labels 2026-10-14 21:39:54 +00:00

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch time/card-53.

⏱️ Time: Claude Sonnet (Anthropic) is working on this now, on branch `time/card-53`. <!-- time {"beat":"dispatched","launched":true,"worker":"anthropic"} -->

⏱️ Time: sonnet opened PR #59 (23 steps, claude-sonnet-5-5). Review and landing follow on the next beat.

⏱️ Time: `sonnet` opened PR #59 (23 steps, claude-sonnet-5-5). Review and landing follow on the next beat. <!-- time {"beat":"dispatched","worker":"anthropic","pr":59,"steps":23,"seat":"sonnet","model":"claude-sonnet-5-5"} -->

⏱️ Time: PR #59 is up for this card. haiku reviewed it on the PR.

⏱️ Time: PR #59 is up for this card. `haiku` reviewed it on the PR. <!-- time {"beat":"pr","pr":59,"launched":false,"review":"venice","seat":"haiku"} -->

⏱️ Time: approved, but PR #59 touches protected paths (.github/time/test_time.py, .github/time/time.py), so a human merges this one.

⏱️ Time: approved, but PR #59 touches protected paths (.github/time/test_time.py, .github/time/time.py), so a human merges this one. <!-- time {"beat":"needs-human","pr":59} -->
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: teahubxyz/time#53