Fixes#129. The local driver sometimes ran git commit itself instead of calling finish_milestone. It then told the operator "the PR is awaiting your merge" when no PR existed, and CI run 463 failed on it.
The fix: a commit still runs. It's contained, and publishing takes whatever is in the workspace anyway. But when one of the driver's commands commits anywhere in its line, say git add -A && git commit -m … or git -C sub commit, the harness adds to the call's result:
[harness] committed locally only: nothing is published until you call finish_milestone, which pushes the milestone's branch and opens or updates its PR. There is no PR until then.
This puts the fact in front of the model at the moment it would draw the wrong conclusion, which is structural (P6), rather than hoping it notices. The detection reads the parsed command (nisse_dev.loop.actions.commits), so echo git commit and git log --grep commit don't count.
Tests:
which lines count as a commit, 7 cases;
a loop run in which the driver commits by hand gets the note, and a plain git status doesn't.
Results, run locally:
Unit: 727 passed.
Integration: 18 passed.
Smoke e2e: 3 of 3.
The bug-grace test, where #129 showed up: 2 of 2. The model didn't commit by hand in either run; it was intermittent.
Fixes #129. The local driver sometimes ran `git commit` itself instead of calling `finish_milestone`. It then told the operator *"the PR is awaiting your merge"* when no PR existed, and CI run 463 failed on it.
**The fix:** a commit still runs. It's contained, and publishing takes whatever is in the workspace anyway. But when one of the driver's commands commits anywhere in its line, say `git add -A && git commit -m …` or `git -C sub commit`, the harness adds to the call's result:
> [harness] committed locally only: nothing is published until you call finish_milestone, which pushes the milestone's branch and opens or updates its PR. There is no PR until then.
This puts the fact in front of the model at the moment it would draw the wrong conclusion, which is structural (P6), rather than hoping it notices. The detection reads the parsed command (`nisse_dev.loop.actions.commits`), so `echo git commit` and `git log --grep commit` don't count.
**Tests:**
- which lines count as a commit, 7 cases;
- a loop run in which the driver commits by hand gets the note, and a plain `git status` doesn't.
**Results, run locally:**
- **Unit:** 727 passed.
- **Integration:** 18 passed.
- **Smoke e2e:** 3 of 3.
- **The bug-grace test,** where #129 showed up: 2 of 2. The model didn't commit by hand in either run; it was intermittent.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
The local driver sometimes ran `git commit` itself instead of calling
finish_milestone, then told the operator a PR was waiting when none had
been opened. A commit still runs (it's contained, and publishing takes
whatever is there), but when the driver's command commits anywhere in
its line, the harness adds to its result: committed locally only;
nothing is published until finish_milestone, and there is no PR until
then. Structural, at the moment the model would draw the wrong
conclusion (P6), rather than left to it noticing.
Closes#129
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.
Fixes #129. The local driver sometimes ran
git commititself instead of callingfinish_milestone. It then told the operator "the PR is awaiting your merge" when no PR existed, and CI run 463 failed on it.The fix: a commit still runs. It's contained, and publishing takes whatever is in the workspace anyway. But when one of the driver's commands commits anywhere in its line, say
git add -A && git commit -m …orgit -C sub commit, the harness adds to the call's result:This puts the fact in front of the model at the moment it would draw the wrong conclusion, which is structural (P6), rather than hoping it notices. The detection reads the parsed command (
nisse_dev.loop.actions.commits), soecho git commitandgit log --grep commitdon't count.Tests:
git statusdoesn't.Results, run locally:
🤖 Generated with Claude Code
https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE