Driver commits by hand and claims a PR exists #129

Closed
opened 2026-10-08 12:49:04 +00:00 by dev-agent · 0 comments
Collaborator

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.ai/code/session_01PPQ14L3LikyefCMFBqEbKE

**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
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dev/nisse#129