The cloud lane's first card went through: #171's session built PR #199 (CI green), sync handed the card back, and the heartbeat adopted the PR. haiku then objected.
Its points:
Point 1 is wrong. It reviewed from the diff alone and assumed pick_cloud doesn't skip n is None; it does.
Points 2 and 3 are real but minor: the parked window is off by a day, and a closed card can be proposed again.
The review was cut off partway through point 4.
/time retry is the wrong tool here. It sends the API worker to push to the PR branch, but a cloud PR's branch is the GitHub copy's to write, and the next sync would overwrite those commits.
So the revision comes from the cloud:
Launcher (on hb-5, not in this repo): a card it built whose last beat is needs-human on an open PR from a claude/ branch, with a REQUEST_CHANGES review, gets one more session. That session works on the same branch with the review in its prompt, and is told the reviewer can be wrong. One revision per card; after that, a human. Revisions go ahead of new cards and count toward the daily cap.
sync.py, here: when the copy moves a branch whose PR is open and already reviewed, revised() does two things:
It posts a dispatched beat marked revised on each card the PR closes, so tick() finds the PR and reviews again, and land() ignores verdicts from before the push.
It removes needs-human from the PR.
A PR nobody has reviewed yet gets nothing, and neither does a branch that's new to the home. The sync log line reports revised [...].
Test 83: a revision of a reviewed PR posts the beat and unlabels the PR; a push before any review posts nothing; another repo, or no previous head, posts nothing.
test_time.py green locally (24 sections). Main's test file has moved since my base and the hunk applied cleanly, so this PR's CI run is the check on the combined file.
The cloud lane's first card went through: #171's session built PR #199 (CI green), sync handed the card back, and the heartbeat adopted the PR. haiku then objected.
Its points:
- **Point 1 is wrong.** It reviewed from the diff alone and assumed `pick_cloud` doesn't skip `n is None`; it does.
- **Points 2 and 3 are real but minor:** the parked window is off by a day, and a closed card can be proposed again.
- **The review was cut off** partway through point 4.
`/time retry` is the wrong tool here. It sends the API worker to push to the PR branch, but a cloud PR's branch is the GitHub copy's to write, and the next sync would overwrite those commits.
So the revision comes from the cloud:
- **Launcher (on hb-5, not in this repo):** a card it built whose last beat is `needs-human` on an open PR from a `claude/` branch, with a `REQUEST_CHANGES` review, gets one more session. That session works on the same branch with the review in its prompt, and is told the reviewer can be wrong. One revision per card; after that, a human. Revisions go ahead of new cards and count toward the daily cap.
- **`sync.py`, here:** when the copy moves a branch whose PR is open and already reviewed, `revised()` does two things:
- It posts a `dispatched` beat marked `revised` on each card the PR closes, so `tick()` finds the PR and reviews again, and `land()` ignores verdicts from before the push.
- It removes `needs-human` from the PR.
A PR nobody has reviewed yet gets nothing, and neither does a branch that's new to the home. The sync log line reports `revised [...]`.
- **Test 83:** a revision of a reviewed PR posts the beat and unlabels the PR; a push before any review posts nothing; another repo, or no previous head, posts nothing.
`test_time.py` green locally (24 sections). Main's test file has moved since my base and the hunk applied cleanly, so this PR's CI run is the check on the combined file.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The cloud lane's first card went through: #171's session built PR #199 (CI green), sync handed the card back, and the heartbeat adopted the PR. haiku then objected.
Its points:
pick_clouddoesn't skipn is None; it does./time retryis the wrong tool here. It sends the API worker to push to the PR branch, but a cloud PR's branch is the GitHub copy's to write, and the next sync would overwrite those commits.So the revision comes from the cloud:
Launcher (on hb-5, not in this repo): a card it built whose last beat is
needs-humanon an open PR from aclaude/branch, with aREQUEST_CHANGESreview, gets one more session. That session works on the same branch with the review in its prompt, and is told the reviewer can be wrong. One revision per card; after that, a human. Revisions go ahead of new cards and count toward the daily cap.sync.py, here: when the copy moves a branch whose PR is open and already reviewed,revised()does two things:dispatchedbeat markedrevisedon each card the PR closes, sotick()finds the PR and reviews again, andland()ignores verdicts from before the push.needs-humanfrom the PR.A PR nobody has reviewed yet gets nothing, and neither does a branch that's new to the home. The sync log line reports
revised [...].Test 83: a revision of a reviewed PR posts the beat and unlabels the PR; a push before any review posts nothing; another repo, or no previous head, posts nothing.
test_time.pygreen locally (24 sections). Main's test file has moved since my base and the hunk applied cleanly, so this PR's CI run is the check on the combined file.🤖 Generated with Claude Code
https://claude.ai/code/session_017K4vyY3yUD3GsvoZaAtKkD