A review that runs past the output limit says so, and is never a silent Object #202

Closed
opened 2026-10-19 19:01:06 +00:00 by teahubxyz · 3 comments
Owner

haiku's review of PR #199 (card #171) ended mid-word, "- **astra.py, parked_c", then the footer: it ran into think()'s max_tokens: 4000. The verdict was Object, so the card went to needs-humanon a review whose last point nobody can read. Its first point was also wrong (it reviewed from the diff alone and assumedrouter.pick_clouddoesn't skipn is None`; it does), which a longer, complete review might have caught too.

Changes (time.py, the review path):

  • The reviewer's call reads the API's stop reason (finish_reason in the engine's OpenAI shape: length; stop_reason: max_tokens from the Messages API). When a review is cut off, Time either asks once more with a higher limit (TIME_REVIEW_MAX_TOKENS, default 8000), or, if it is still cut off, posts the review with a line saying it was cut off and counts it as no vote, so the council waits or the tie-break seat votes. A truncated review is never an Object on its own.
  • The reviewer prompt asks for the verdict first and at most five points, most important first, each a line or two.
  • Tests: a reply with finish_reason: length is retried with the higher limit; cut off twice, it is posted with the note and casts no vote; a complete reply votes as before.

DONE: PR open with the change above, python3 .github/time/test_time.py green including the new checks, CI green

haiku's review of PR #199 (card #171) ended mid-word, "- **astra.py, `parked_c", then the footer: it ran into `think()`'s `max_tokens: 4000`. The verdict was Object, so the card went to `needs-human` on a review whose last point nobody can read. Its first point was also wrong (it reviewed from the diff alone and assumed `router.pick_cloud` doesn't skip `n is None`; it does), which a longer, complete review might have caught too. Changes (`time.py`, the review path): - The reviewer's call reads the API's stop reason (`finish_reason` in the engine's OpenAI shape: `length`; `stop_reason: max_tokens` from the Messages API). When a review is cut off, Time either asks once more with a higher limit (`TIME_REVIEW_MAX_TOKENS`, default 8000), or, if it is still cut off, posts the review with a line saying it was cut off and counts it as no vote, so the council waits or the tie-break seat votes. A truncated review is never an Object on its own. - The reviewer prompt asks for the verdict first and at most five points, most important first, each a line or two. - Tests: a reply with `finish_reason: length` is retried with the higher limit; cut off twice, it is posted with the note and casts no vote; a complete reply votes as before. DONE: PR open with the change above, `python3 .github/time/test_time.py` green including the new checks, CI green
time added the cloud label 2026-10-20 13:14:18 +00:00
time added ready and removed cloud labels 2026-10-21 03:00:39 +00:00

☁️ The cloud session's branch came home as PR #213. The heartbeat reviews and lands it like any card PR.

☁️ The cloud session's branch came home as PR #213. The heartbeat reviews and lands it like any card PR. <!-- time {"cloud":"home","pr":213} -->

⏱️ Time: adopted PR #213, built outside the worker. haiku reviewed it on the PR.

⏱️ Time: adopted PR #213, built outside the worker. `haiku` reviewed it on the PR. <!-- time {"beat":"pr","pr":213,"adopted":true,"launched":false,"seat":"haiku","as":"seat","review":"venice","seats":["haiku"]} -->
time closed this issue 2026-10-21 03:08:46 +00:00

⏱️ Time: approved and green, merged PR #213. Card done.

⏱️ Time: approved and green, merged PR #213. Card done. <!-- time {"beat":"merged","pr":213} -->
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: teahubxyz/time#202