Review loop (--review-only, --all-reviewer, focused on this Mac: macOS, /usr/bin/python3 3.9.6, bash 3.2): round 1 (@6f4f40a) agy and grok PASS, claude and codex NOT PASS (a non-uuid id `memory` purged the auto-memory dir, a linked dir below a root was followed, a NaN startedAt counted as dead), sent as a PR comment and fixed by the author in eleven commits; round 2 (@2a8d738) confirmed all three fixed but 4/4 NOT PASS on one test holder (`sh -c "sleep 120" <uuid>` loses the uuid on macOS /bin/sh), fixed in de6f3fc; round 3 (@de6f3fc) 4/4 PASS. Full suite on macOS / Python 3.9.6 @de6f3fc: 1934 passed, 56 skipped, 1 error (the known #55 false positive: agy conversations of another workspace). The real ~/.claude, /private/tmp/claude-<uid> and herdr panes unchanged. Also names lib_py.delegation.logroot in eager.CORE_MODULES (the v4.9.4 review's non-blocking note). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
4.0 KiB
4.0 KiB
Pre-Merge Review Report (Round 3): PR #59 (fix/issue-31)
- Job ID:
7c325532 - Reviewer:
herdr:reviewer-agy-01(agy) - Commit Range:
26e2c43753169671b600d03274901dbe203988dd..de6f3fc81f8c33a9d2335320742dc5a47f566cda(25 commits; Round 3 delta:2a8d73825b3832376aeaf96b09548359dc3cb887..de6f3fc81f8c33a9d2335320742dc5a47f566cda, 1 commit) - Verification Worktree:
/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261017T145452Z-6c5aa6/1 - Host / Runtime: macOS
arm64-apple-darwin25(Darwin 25.3.0),/usr/bin/python33.9.6 &.venv/bin/python3.9.6,/bin/bash3.2.57
1. Round 3 Delta Verification (2a8d738..de6f3fc)
- Commit
de6f3fc81f8c33a9d2335320742dc5a47f566cda:- Replaces
subprocess.Popen(["sh", "-c", "sleep 120", conv])attests/test_issue31_purge_residual.py:315with:# Not `sh -c "sleep 120" <uuid>`: a shell execs its last simple command # and the uuid would vanish from the process list (macOS /bin/sh). named = subprocess.Popen([sys.executable, "-c", "import time; time.sleep(120)", conv])
- Replaces
- Verification Checklist:
- Lowercase UUID retained in
argvon macOS: The Python holder process does notexeca separate binary, soconvstays visible inps -axo pid=,command=for the lifetime ofnamed. - Passes
[upper]and[mixed]on macOS: Bothtest_any_spelling_of_the_uuid_is_the_lowercase_session[upper]and[mixed]pass on Darwin (67/67tests intests/test_issue31_purge_residual.pypass). - Regression sensitivity preserved: Reverting
for u in {canon, uuid}tofor u in (uuid,)inClaudeAgentAdapter.conversation_in_use(in an isolated/tmpcopy) causes both[upper]and[mixed]to fail immediately attests/test_issue31_purge_residual.py:320(AssertionError: a command line naming the lowercase id). - Process cleanup (
finally: named.kill(); named.wait()): Becausenamedis a single Python process with no forked childsleep,named.kill()andnamed.wait()terminate it cleanly without leaving orphaned processes.
- Lowercase UUID retained in
2. Cumulative Review Summary (26e2c43..de6f3fc)
- Canonical UUID & deletion scope safety:
_canonical(uuid)in.agents/skills/lib_py/agents/adapters/claude.pygates_candidates,has_artifacts,conversation_in_use,purge_artifacts, andresidual_artifacts, preventing non-UUID names (memory,notes,uuid-c, etc.) from matching or deletingprojects/<key>/memory/or any other directory. - Symlink boundary protection:
_inside(root, path)verifies viaos.lstatthat no intermediate directory component betweenrootandos.path.dirname(path)is a symlink and thatrealpath(dirname(path))stays strictly insiderealpath(root), whilehas_artifactscounts_candidatesso symlinked orphans still selectclaudeand appear inresidual_artifacts. - macOS
ps -o lstart=&startedAtfail-safe liveness:_session_file_liverunsps -p <pid> -o lstart=withLC_ALL="C", TZ="UTC0", parses viacalendar.timegm, and treatsbool, non-(int, float),OverflowError,NaN,±inf, and<= 0startedAtvalues as live when the PID exists. stop_session.sh& CLIin-usegate:in_use_hintsand exit-4 error messages accurately report where live holders may be found and that registry records and conversation files are preserved.- Test suite execution:
tests/test_issue31_purge_residual.py: 67 passedtests/test_issue55_agent_homes.py: PASSEDtests/test_issue42_skill_blocks.py: PASSEDtests/test_a4_adapter_contract.py: PASSEDtests/test_orc_onboard.py: PASSED- Total run in Round 3 verification worktree: 185 passed, 1 skipped in 48.05s (
test_tier1_unit.pyalso verified passing in Round 2 with no production changes since2a8d738).
- Worktree hygiene: Verification worktree
/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261017T145452Z-6c5aa6/1is clean (git status -sempty, no.mamdirectory created, basetemp removed).
[VERDICT: PASS]