Files
multi-agent-mux/.agents/reports/reviewer-agy-01/report-3121d389.md
T
GodopuandClaude Fable 5.1 c3e6a7e96d release(v4.7.3): bump framework and eight skills to 4.7.3 in lockstep; archive PR #37 merge-side reviews
Issue #36: delegated prompts travel by file, a delegation that fails ends
the loop with rc 1. VERSIONS.md carries the entry; the merge-side reports
(round 1 @59be1c8 and round 2 @708262a with identity sidecars, base
59be1c8 -> head 708262a, evidence review-tree) are archived under
.agents/reports/<session>/.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
2026-09-24 18:10:28 +09:00

5.5 KiB
Raw Blame History

Pre-Merge Independent Delta Review Report: PR #37 (fix/issue-36 Round 2)

  • Job ID: 3121d389
  • Target Agent: agy (Session: herdr:reviewer-agy-01)
  • Role: Reviewer
  • Target Worktree Context:
    • Loop ID: loop-20260924T085626Z-b8987e
    • Base Commit: 59be1c89209a232059aec0c5aeecc2329929cb49 (Round 1 target)
    • Head Commit: 708262a598c4301c0ccc70efba5401093b4b1e30 (1 delta commit: +68 / −7)
    • Tree SHA: d601c2d01bb4c09931e5e1989e140b01d51f5b96
    • Verification Path: /var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20260924T085626Z-b8987e/1

1. Executive Summary

This second review round examines delta commit 708262a ("fix(issue-36): merge review - handle prompt write failure in runner; reject empty prompt file; make test_s9 stderr check portable").

The commit directly resolves all three findings identified during Round 1:

  1. R1 / H1 (Prompt Write Failure Handling in runner.py): _run_cmd now wraps temporary prompt file creation and writing in try ... except OSError:. If writing fails (e.g. ENOSPC, EFBIG), any partial prompt file is unlinked and a CompletedProcess(..., 126, "", msg) is returned. The wrapper is not invoked, no unhandled exceptions bubble to LoopRunner.run(), and the failure is logged cleanly. Verified by new test test_s4c.
  2. R2 / N1 (macOS Portability in test_s9): In tests/test_issue36_prompt_transport.py, line 637 guards the assertion assert "File too large" in result.stderr with if sys.platform == "linux":. This accommodates macOS /bin/bash 3.2.57 behavior while continuing to assert result.returncode != 0, clean file removal (assert not leftovers), and the portable MAM diagnostic (assert "delegate_job_safe: cannot write the prompt file" in result.stderr) across all platforms.
  3. H3 (Empty Prompt File Rejection): multi-agent-mux-delegate-job now asserts [[ -s "$PROMPT_FILE" ]] in cmd_submit(), rejecting empty files before registration. Verified by new test test_s1e.

All 23 applicable tests in tests/test_issue36_prompt_transport.py passed cleanly in the macOS verification environment (with 1 platform-specific test skipped on Darwin as intended).


2. Detailed Verification Against Checklist Items

(1) Verification of the Three Delta Fixes & Side-Effect Analysis

  • Prompt File Creation & Cleanup in runner.py (R1/H1):
    • prompt_file is initialized to "".
    • In _run_cmd, tempfile.NamedTemporaryFile and fh.write(p_text) are wrapped in try ... except OSError as e:.
    • If writing fails:
      • If prompt_file exists, it is unlinked immediately in the except block.
      • Returns subprocess.CompletedProcess(["bash", str(wrapper_script), "submit"], 126, "", msg).
      • Because it returns directly from the except block, the downstream subprocess.run(cmd) and the outer finally: block do not execute. The wrapper is never invoked with an incomplete file.
    • On the normal path:
      • The wrapper executes, and the outer finally: os.unlink(prompt_file) ensures the file is deleted exactly once.
    • The returned exit code 126 triggers the existing retry mechanism in delegate_job(); if the write still fails, the error message is logged cleanly and delegate_job() returns None, terminating the loop with exit code 1 without tracebacks.
    • Verified by test_s4c_a_prompt_file_that_cannot_be_written_is_a_failed_submit.
  • macOS Test Portability for test_s9 (R2/N1):
    • Scoping assert "File too large" in result.stderr to sys.platform == "linux" eliminates the macOS AssertionError that caused the Round 1 NOT PASS.
    • Portable assertions across Darwin and Linux verify:
      • assert result.returncode != 0 (non-zero exit upon write failure).
      • assert not leftovers (partial .mam/prompt-shloop-* files are deleted).
      • assert "delegate_job_safe: cannot write the prompt file" in result.stderr (MAM error diagnostics printed to stderr).
    • Verified by running tests/test_issue36_prompt_transport.py::test_s9_shell_loop_removes_a_partial_prompt_file_and_says_why on macOS (PASS).
  • Empty Prompt File Rejection (H3):
    • cmd_submit() in multi-agent-mux-delegate-job checks [[ -s "$PROMPT_FILE" ]] || { echo "submit: --prompt-file $PROMPT_FILE is empty" >&2; exit 1; }.
    • Rejects zero-byte prompt files fail-closed before invoking registry.py.
    • Verified by test_s1e_an_empty_prompt_file_is_refused.

(2) Impact of Empty File Rejection on Valid Workflows

  • In MAM, all valid delegated prompts (task instructions, review requests, refinement briefs, compliance orders) require meaningful textual context.
  • Loop brief provisioning (prompt.md) always writes non-empty markdown briefs containing metadata and task descriptions.
  • Enforcing -s prevents unintended empty job dispatches without affecting legitimate system workflows.

(3) Overall Merge Readiness

  • Commit 708262a cleanly addresses all review concerns with minimal, surgical changes (+68 / −7).
  • git diff 59be1c8...HEAD --check reported 0 whitespace or formatting errors.
  • Version bump to v4.7.3 is scheduled for the orchestrator release commit.
  • Zero blockers remaining.

3. Test Execution Summary

Test Suite / Target Result Duration Notes
tests/test_issue36_prompt_transport.py 23 PASS, 1 SKIP 42.4s 23 passed on macOS; test_s1b skipped (linux_only constant test); test_s9, test_s4c, test_s1e all pass
git diff 59be1c8...HEAD --check 0 errors 0.05s Clean formatting and no whitespace errors

[VERDICT: PASS]