Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
3.7 KiB
Review report — PR #73 / Issue #71
Reviewed validation snapshot /var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261026T133440Z-c8961b/2: head 5f6065344f800c2c5ad6f802e95e9e8ff5cc7b26, tree 98d57bdc60920238c115ece90c90cc694f2744bc, base 29cc4fd90478936f15387a7665e2c95d13a3f14c. The snapshot was clean; git diff --check reported no whitespace errors. No source files were changed.
Findings
No blocking or non-blocking defects found in this pass.
The earlier rowless-stop finding about HERDR_SESSION_NAME=default was re-adjudicated in job f40aa3bd and withdrawn. That environment value is treated as unset by create: create_session.sh:179-187,251-256 chooses the workspace server unless the caller supplies --herdr-session. Rowless stop follows the same resolution (stop_session.sh:109-130; lib.sh:1681-1712). The prior probe put an agent on default without the explicit option, a state that invocation of create would not produce. Deliberate default-server selection remains possible with --herdr-session default and the stop command accepts the same explicit option.
Review checks
attach_commandis centralized inlib_py/agents/sanitize.pyand used by create (create_session.sh:512,566), resume (update_yaml_resumed.sh:119,151,161), and reconcile (reconcile.sh:569,676). Coverage checks default server rendering, shell quoting, normalized names, and attach argument forwarding.- Runtime references to removed
start_commandandkill_commandfields are gone; only migration compatibility docs/code and assertions remain. The shim’snew-sessionandkill-sessionroutes are still needed by the lifecycle scripts. Cleanup guidance now directs to the stop skill (create_session.sh:364,lib_py/agents/id_order.py:342-345). - Rowless stop validates strict registry readability (
stop_session.sh:169-173), refuses purge without a row (124-126), resolves cwd/root canonically before checking containment (145-154), and leaves registry bytes untouched (156-164). The safety and exit-code cases are covered by the new tests and the stop skill table (SKILL.md:58-67). - The bash sanitizer is defined once (
lib.sh:44-82), uses verified hash fallbacks, and errors when no conversion/hash tool is available. On macOS Bash 3.2, names containingİ,-n, and a trailing newline matched Python underLC_ALL=CandLC_ALL=C.UTF-8. - Registry migration updates all named rows and format metadata (
registry_format.py:35-66) before caller mutation underBEGIN IMMEDIATE(atomic_yaml.py:78-88); stale YAML is repaired from DB state (127-138).atomic_dump_yamlis the only sanctioned registry YAML writer. Future versions are not downgraded. The migration entry point’s output/error contract is documented and implemented inregistry_format.py:17-25,69-88. - StallWatch computes the normalized herdr name once and passes it to its source (
stall_watch.py:229); its unchanged test passes. - S11’s baseline
0fc162eexists and is an ancestor of this head. Python 3.9.6 and Bash 3.2.57 are the host versions used. The scope excludes Issue #72’s update skill.
Verification
Commands used the required PYTHONDONTWRITEBYTECODE=1, -p no:cacheprovider, and --basetemp outside the validation checkout.
- Head combined review run (all requested focused and adjacent suites): 461 passed, 1 skipped in 1295.97s. This included
test_issue71_herdr_names.py,test_issue66_stall_watch_sanitized_name.py, tier 1/2/3, Issues 23/24, 50, 21, 63, 60, layout, and skill blocks. - Base Issue #71 regression run from the temporary base snapshot: 68 failed, 2 passed in 121.85s, matching the expected base behavior.
- Unicode/name parity probe under C and C.UTF-8: outputs matched Python.
git diff --check: clean.
[VERDICT: PASS]