Seen in CI run 463 (PR #128, the bug-grace e2e test), with the local driver qwen3.8-27b-nothink:
The driver ran git commit itself twice (the fast path's git-local verdict, which is contained and runs).
It never called finish_milestone.
It then told the operator "The fix is committed and verified (63 passed); the PR is awaiting your merge" through ask_human. No PR had been opened.
The test's operator ran out of answers.
It passed on rerun, and 3 of 3 locally, so it's intermittent.
Why it's worth fixing: a local commit looks like publishing to the model. Committing by hand is harmless in itself: publishing counts from where the milestone started, and the harness commits whatever is there. The confusion is the problem, though, and it's structural, so it should be answered in code (P6), not left to the model noticing.
Suggested fix: let git commit run, but have the fast path attach a note to the call's result, for example: "committed locally only: nothing is published until you call finish_milestone, which pushes and opens the PR". Possibly do the same for any git push-shaped confusion. A test with a scripted driver that commits by hand should check that the note reaches it.
Alternatives:
Refuse git commit outright, as branch commands are. It's simpler, but more friction for a harmless action.
Have ask_human check claims of a PR against the item's state. That's harder, and it's model judgement.
**Seen in CI run 463** (PR #128, the bug-grace e2e test), with the local driver `qwen3.8-27b-nothink`:
1. The driver ran `git commit` itself twice (the fast path's `git-local` verdict, which is contained and runs).
2. It never called `finish_milestone`.
3. It then told the operator *"The fix is committed and verified (63 passed); the PR is awaiting your merge"* through `ask_human`. No PR had been opened.
4. The test's operator ran out of answers.
It passed on rerun, and 3 of 3 locally, so it's intermittent.
**Why it's worth fixing:** a local commit looks like publishing to the model. Committing by hand is harmless in itself: publishing counts from where the milestone started, and the harness commits whatever is there. The confusion is the problem, though, and it's structural, so it should be answered in code (P6), not left to the model noticing.
**Suggested fix:** let `git commit` run, but have the fast path attach a note to the call's result, for example: *"committed locally only: nothing is published until you call finish_milestone, which pushes and opens the PR"*. Possibly do the same for any `git push`-shaped confusion. A test with a scripted driver that commits by hand should check that the note reaches it.
**Alternatives:**
- Refuse `git commit` outright, as branch commands are. It's simpler, but more friction for a harmless action.
- Have `ask_human` check claims of a PR against the item's state. That's harder, and it's model judgement.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
Seen in CI run 463 (PR #128, the bug-grace e2e test), with the local driver
qwen3.8-27b-nothink:git commititself twice (the fast path'sgit-localverdict, which is contained and runs).finish_milestone.ask_human. No PR had been opened.It passed on rerun, and 3 of 3 locally, so it's intermittent.
Why it's worth fixing: a local commit looks like publishing to the model. Committing by hand is harmless in itself: publishing counts from where the milestone started, and the harness commits whatever is there. The confusion is the problem, though, and it's structural, so it should be answered in code (P6), not left to the model noticing.
Suggested fix: let
git commitrun, but have the fast path attach a note to the call's result, for example: "committed locally only: nothing is published until you call finish_milestone, which pushes and opens the PR". Possibly do the same for anygit push-shaped confusion. A test with a scripted driver that commits by hand should check that the note reaches it.Alternatives:
git commitoutright, as branch commands are. It's simpler, but more friction for a harmless action.ask_humancheck claims of a PR against the item's state. That's harder, and it's model judgement.🤖 Generated with Claude Code
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE