Publish work the executor committed itself, and gate when there is none
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 1m15s
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 1m15s
On the first live run the executor committed its milestone itself, as its plan asked. The publisher only published a commit it made, found a clean tree, reported "no changes to publish", and left the agent in EXECUTING, where every message is answered "busy". - publish(): with nothing left to commit, publish anyway when the branch has commits origin/<base> lacks; report no changes only when it has none. - push_followup(): same for review fixes, comparing HEAD with what the remote branch holds (ls-remote; pushes go by URL, so there is no tracking ref). - Nothing to publish now gates to AWAIT_INPUT, and the reply returns to the still-approved milestone plan. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
This commit is contained in:
1 parent
8283e9eb1c
commit
f97e459bc7
6 files changed
+119
-11
No files matched your search
@@ -10,7 +10,7 @@ import pytest
|
||||
from nisse_dev.canonical import AssistantText, CanonicalEvent, StoredEvent, ToolCall
|
||||
from nisse_dev.control import (
|
||||
AWAIT_INPUT,
|
||||
EXECUTING,
|
||||
AWAIT_MILESTONE_SIGNOFF,
|
||||
IDLE,
|
||||
PR_OPEN,
|
||||
Orchestrator,
|
||||
@@ -153,11 +153,17 @@ def test_unknown_command_in_pr_open_explains_the_options(tmp_path: Path) -> None
|
||||
assert "next milestone" in transport.outbound[-1].text
|
||||
|
||||
|
||||
def test_no_changes_reports_without_entering_pr_open(tmp_path: Path) -> None:
|
||||
def test_no_changes_gates_to_the_operator_without_entering_pr_open(
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
publisher = FakePublisher(result=PublishResult(None, "no changes to publish"))
|
||||
store, transport = run_to_pr(tmp_path, publisher)
|
||||
assert store.get_state().state == EXECUTING
|
||||
assert transport.outbound[-1].text == "no changes to publish"
|
||||
# Not left in EXECUTING, where every message is answered "busy".
|
||||
assert store.get_state().state == AWAIT_INPUT
|
||||
assert "no changes to publish" in transport.outbound[-1].text
|
||||
transport.receive("don", "ok")
|
||||
assert store.get_state().state == AWAIT_MILESTONE_SIGNOFF
|
||||
assert "start milestone 1" in transport.outbound[-1].text
|
||||
|
||||
|
||||
def test_publish_failure_gates_to_the_operator(tmp_path: Path) -> None:
|
||||
|
||||
Reference in new issue
Block a user