Follow-ups from the new loop's first live run (sandbox issue #255 → PR #256, merged, item closed).
Changes
Answer where asked (D5). An item remembers where the operator last spoke.
A question asked on the PR is answered on the PR.
An inline comment's answer quotes its file and line (> on \text.py:9`:`), since Gitea's API can't reply inside an inline thread.
The item's Matrix thread gets a one-line pointer: "I answered your comment on PR #N: ".
Once the operator speaks in Matrix, answers go back there.
Live, the agent's (good) answer to an inline question jumped to Matrix, which was confusing.
wait_for_review(note): a waiting tool, offered only while a PR is open. When a review needs no change, or only the operator's merge is left, the item waits on the merge, not on an answer. Live, it used ask_human to say "please merge", which left status saying "waiting for an answer".
finish_milestone(summary, title): the driver titles its PR. Live, the title was the issue's title plus "(milestone 1)", which reads oddly for "Please add…".
Also: the e2e test's merge waits out Gitea's brief 405 "Please try again later". Gitea returns that while it's still checking a just-pushed PR can merge.
Tests
New in test_loop_milestones.py:
a PR question answered on the PR, quoted, with the Matrix pointer;
questions go back to Matrix after a Matrix reply;
wait_for_review → waiting on the merge → the merge closes the item;
the driver's PR title.
The property walk's model now also calls wait_for_review.
628 unit tests pass. Both e2e tests pass on the build VM.
Follow-ups from **the new loop's first live run** (sandbox issue #255 → PR #256, merged, item closed).
## Changes
1. **Answer where asked** (D5). An item remembers where the operator last spoke.
- **A question asked on the PR is answered on the PR.**
- An inline comment's answer quotes its file and line (`> on \`text.py:9\`:`), since Gitea's API can't reply inside an inline thread.
- The item's Matrix thread gets a one-line pointer: "I answered your comment on PR #N: <link>".
- **Once the operator speaks in Matrix, answers go back there.**
- Live, the agent's (good) answer to an inline question jumped to Matrix, which was confusing.
2. **`wait_for_review(note)`:** a waiting tool, offered only while a PR is open. When a review needs no change, or only the operator's merge is left, the item waits on the **merge**, not on an answer. Live, it used `ask_human` to say "please merge", which left `status` saying "waiting for an answer".
3. **`finish_milestone(summary, title)`:** the driver titles its PR. Live, the title was the issue's title plus "(milestone 1)", which reads oddly for "Please add…".
**Also:** the e2e test's merge waits out Gitea's brief **405 "Please try again later"**. Gitea returns that while it's still checking a just-pushed PR can merge.
## Tests
- **New in `test_loop_milestones.py`:**
- a PR question answered on the PR, quoted, with the Matrix pointer;
- questions go back to Matrix after a Matrix reply;
- `wait_for_review` → waiting on the merge → the merge closes the item;
- the driver's PR title.
- **The property walk's model** now also calls `wait_for_review`.
- 628 unit tests pass. Both e2e tests pass on the build VM.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
From the new loop's first live run (sandbox #255, PR #256):
- A question asked on the PR is answered on the PR (an inline one quoted
with its file and line, since the API can't reply in its thread), with
a pointer in the item's Matrix thread; one asked in Matrix stays there.
- wait_for_review: when a review needs no change, or only the operator's
merge is left, the item waits on the merge instead of on an answer.
- finish_milestone takes the PR's title from the driver.
The e2e test's merge waits out Gitea's brief 'try again later' after a
push.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
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.
Follow-ups from the new loop's first live run (sandbox issue #255 → PR #256, merged, item closed).
Changes
> on \text.py:9`:`), since Gitea's API can't reply inside an inline thread.wait_for_review(note): a waiting tool, offered only while a PR is open. When a review needs no change, or only the operator's merge is left, the item waits on the merge, not on an answer. Live, it usedask_humanto say "please merge", which leftstatussaying "waiting for an answer".finish_milestone(summary, title): the driver titles its PR. Live, the title was the issue's title plus "(milestone 1)", which reads oddly for "Please add…".Also: the e2e test's merge waits out Gitea's brief 405 "Please try again later". Gitea returns that while it's still checking a just-pushed PR can merge.
Tests
test_loop_milestones.py:wait_for_review→ waiting on the merge → the merge closes the item;wait_for_review.🤖 Generated with Claude Code
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE