CI on #159 and #160 failed on test_two_projects_keep_the_properties[468] (no_model_on_a_lost_vm). It fails on main too: the PR seeds move with the CI run number, and this one reached a latent nisse-dev bug.
The bug: in _delegate, after a helper hands back, the harness moves its work onto the milestone's branch with git on the build VM. If the VM is lost right then, git._git turns HostUnavailable into a GitError; _delegate noted it as a fact and returned, so the driver's run went on and called the model with its VM gone.
The fix: a GitError whose cause is HostUnavailable raises VMUnreachable (after the delegation's intents are settled as before), so the run ends and the VM is blocked, like every other lost-VM path (#137).
Tests:test_a_vm_lost_as_a_helper_hands_back_ends_the_drivers_run (test_loop_vm.py) fails without the fix; seed 468 passes; all 569 nisse-dev tests pass locally, all 48 walk seeds included.
Once this merges I'll rebase #159 and #160 onto main so their CI reruns.
CI on #159 and #160 failed on `test_two_projects_keep_the_properties[468]` (`no_model_on_a_lost_vm`). It fails on `main` too: the PR seeds move with the CI run number, and this one reached a latent nisse-dev bug.
**The bug:** in `_delegate`, after a helper hands back, the harness moves its work onto the milestone's branch with git on the build VM. If the VM is lost right then, `git._git` turns `HostUnavailable` into a `GitError`; `_delegate` noted it as a fact and returned, so the driver's run went on and called the model with its VM gone.
**The fix:** a `GitError` whose cause is `HostUnavailable` raises `VMUnreachable` (after the delegation's intents are settled as before), so the run ends and the VM is blocked, like every other lost-VM path (#137).
**Tests:** `test_a_vm_lost_as_a_helper_hands_back_ends_the_drivers_run` (`test_loop_vm.py`) fails without the fix; seed 468 passes; all 569 nisse-dev tests pass locally, all 48 walk seeds included.
Once this merges I'll rebase #159 and #160 onto `main` so their CI reruns.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
The property walk (seed 468, a CI run's moving seed) found it: when the
build VM went out of reach while _delegate moved the helper's work back
onto the milestone's branch, git's HostUnavailable came back as a
GitError, was noted as a fact, and the driver's run went on, calling the
model with its VM gone (no_model_on_a_lost_vm). Now a GitError caused by a
lost VM raises VMUnreachable once the delegation's intents are settled, so
the run ends and the VM is blocked, as for any other lost-VM call (#137).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
nisse-review couldn't review this at 76d8e36f43 (2 tries; the last: hit the 40-turn cap). It tries again after the next push, or an operator's review.
nisse-review couldn't review this at 76d8e36f43e4 (2 tries; the last: hit the 40-turn cap). It tries again after the next push, or an operator's `review`.
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.
CI on #159 and #160 failed on
test_two_projects_keep_the_properties[468](no_model_on_a_lost_vm). It fails onmaintoo: the PR seeds move with the CI run number, and this one reached a latent nisse-dev bug.The bug: in
_delegate, after a helper hands back, the harness moves its work onto the milestone's branch with git on the build VM. If the VM is lost right then,git._gitturnsHostUnavailableinto aGitError;_delegatenoted it as a fact and returned, so the driver's run went on and called the model with its VM gone.The fix: a
GitErrorwhose cause isHostUnavailableraisesVMUnreachable(after the delegation's intents are settled as before), so the run ends and the VM is blocked, like every other lost-VM path (#137).Tests:
test_a_vm_lost_as_a_helper_hands_back_ends_the_drivers_run(test_loop_vm.py) fails without the fix; seed 468 passes; all 569 nisse-dev tests pass locally, all 48 walk seeds included.Once this merges I'll rebase #159 and #160 onto
mainso their CI reruns.🤖 Generated with Claude Code
https://claude.ai/code/session_01J5Utyfzw7gF7UhjRDEtjTk
nisse-review couldn't review this at
76d8e36f43(2 tries; the last: hit the 40-turn cap). It tries again after the next push, or an operator'sreview.