nisse-dev: a VM lost as a helper's work is taken back ends the run
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
This commit is contained in:
1 parent
de1356cd17
commit
76d8e36f43
2 files changed
+44
No files matched your search
@@ -338,3 +338,42 @@ def test_a_vm_lost_just_before_the_step_blocks_before_any_model_call(
|
||||
agent, _ = agent_for(world, project, model, clock=Clock())
|
||||
agent.intake()
|
||||
assert list(blocks(world).values()) == ["unreachable"]
|
||||
|
||||
|
||||
def test_a_vm_lost_as_a_helper_hands_back_ends_the_drivers_run(
|
||||
world: dict[str, Any], project: str, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
# Found by the property walk (seed 468): taking the helper's work back
|
||||
# onto the milestone's branch failed for the lost VM, was noted as a git
|
||||
# error, and the driver's model was called with the VM gone.
|
||||
from test_loop_help import Spy, hand_back, helpers
|
||||
|
||||
faults = Faults(monkeypatch, world["host"])
|
||||
|
||||
class Leaving(Spy):
|
||||
def complete(self, events, tools, model, system=None) -> list[Any]:
|
||||
out = super().complete(events, tools, model, system)
|
||||
if not self.turns: # gone as its work is taken back
|
||||
faults.drop_on = "checkout -q -f -B"
|
||||
return out
|
||||
|
||||
helper = Leaving(
|
||||
[call("write_file", path="helped.py", content="H = 1\n")], [hand_back()]
|
||||
)
|
||||
model = ScriptedModel(
|
||||
ready(),
|
||||
RESTATE,
|
||||
[
|
||||
call("start_milestone", name="m"),
|
||||
call("delegate", task="write helped.py"),
|
||||
],
|
||||
[call("run_command", command="echo never")], # never asked for
|
||||
)
|
||||
agent, transport = agent_for(
|
||||
world, project, model, clock=Clock(), helpers=helpers(helper)
|
||||
)
|
||||
agent.intake()
|
||||
say(transport, world, "go")
|
||||
assert list(blocks(world).values()) == ["unreachable"]
|
||||
assert the_item(world).position == READY
|
||||
assert len(model.turns) == 1 # the driver's model wasn't called again
|
||||
Reference in new issue
Block a user