fix: attach_command from one builder; no kill/start_command; stop closes a row-less session (Issue #71)
- attach_command is `herdr --session <server> agent attach <herdr name>`
(`default` written too), built by lib_py.agents.sanitize.attach_command;
create, resume and reconcile all use it. kill_command and start_command
are no longer written, and status --json drops start_command.
- The two raw kill-session hints (create exit 43, id_order's orphan) print a
stop-skill command with --herdr-session instead.
- stop_session.sh closes a session that has no registry row, herdr only and
without --agent, when herdr runs it inside this workspace; another
workspace's session is refused (exit 5), a missing one is exit 1, one that
survives kill-session is exit 6. The registry is not changed.
- Docs: only the SKILL.md lines these changes made wrong; the skill block
pins follow. Tests that asserted the removed fields keep their intent
(issue50: create's own row; issue21: no control-root path in
attach_command; tier2: the new form and the absent fields). S11 pins the
shim to 4243da5, which changed it on purpose.
Refs #71
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9c21fa4e4f
commit
e4c7c8fe9b
19 files changed
+605
-109
No files matched your search
@@ -299,10 +299,11 @@ def test_s11_this_branch_does_not_change_the_generated_shim(mam_sandbox):
|
||||
true at runtime. Issue #45 changed the heredoc on purpose (the bootstrap
|
||||
starts the server with restore-on-restart off, and its review R1 passes
|
||||
REAL_HERDR to the config check), and so did the real-server leak fix
|
||||
(only a directory that is itself *-shim is skipped), so the base is
|
||||
that commit."""
|
||||
(only a directory that is itself *-shim is skipped). Issue #71 changed it
|
||||
too (one sanitize definition written in with `declare -f`, agent attach
|
||||
resolved, no silent wrong name), so the base is that commit."""
|
||||
repo = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
base = os.environ.get("MAM_BASE_SHA", "525df2b")
|
||||
base = os.environ.get("MAM_BASE_SHA", "4243da5")
|
||||
show = subprocess.run(["git", "show", "%s:.agents/skills/lib.sh" % base],
|
||||
capture_output=True, text=True, cwd=repo)
|
||||
if show.returncode != 0:
|
||||
@@ -316,16 +317,21 @@ def test_s11_this_branch_does_not_change_the_generated_shim(mam_sandbox):
|
||||
|
||||
|
||||
def _heredoc_body(text):
|
||||
"""What lib.sh writes into the shim: the sanitize function it declares in
|
||||
(Issue #71), then the heredoc."""
|
||||
lines = text.splitlines(True)
|
||||
fn = [i for i, line in enumerate(lines) if line.startswith("_sanitize_herdr_agent_name() {")]
|
||||
assert len(fn) == 1, "one _sanitize_herdr_agent_name definition in lib.sh"
|
||||
fn_end = next(j for j in range(fn[0], len(lines)) if lines[j].rstrip("\n") == "}")
|
||||
start = None
|
||||
for i, line in enumerate(lines):
|
||||
if line.strip() == "cat <<'EOF' > \"$tmp_file\"":
|
||||
if line.strip() == "cat <<'EOF'":
|
||||
start = i + 1
|
||||
break
|
||||
assert start is not None, "shim heredoc not found in lib.sh"
|
||||
for j in range(start, len(lines)):
|
||||
if lines[j].rstrip("\n") == "EOF":
|
||||
return "".join(lines[start:j])
|
||||
return "".join(lines[fn[0]:fn_end + 1] + lines[start:j])
|
||||
raise AssertionError("unterminated shim heredoc")
|
||||
|
||||
|
||||
@@ -1272,7 +1278,9 @@ def test_s9_a_kill_that_left_the_session_alive_is_reported(mam_sandbox):
|
||||
"rolled back" anyway, leaving a `running` row against a failed job."""
|
||||
res, published, yaml_text = _run_rollback(mam_sandbox, kill_rc=1, still_alive=True)
|
||||
assert res.returncode == 43, res.stdout + res.stderr
|
||||
assert "test-sess" in res.stderr and "kill-session" in res.stderr
|
||||
# Issue #71: the clean-up hint is the stop skill, naming the server
|
||||
assert "Clean it up with: bash .agents/skills/multi-agent-mux-stop/scripts/stop_session.sh --session test-sess --herdr-session default" in res.stderr
|
||||
assert "kill-session -t" not in res.stderr
|
||||
assert "rollback-failed" in yaml_text, yaml_text
|
||||
assert "status: running" in yaml_text, "a session that is still up must not be called gone"
|
||||
assert "delegate_job_id: null" in yaml_text, yaml_text
|
||||
|
||||
Reference in new issue
Block a user