3.5 KiB
Review Report (Re-review) — MAM Installer (scripts/install_mam.sh) & Manual (.agents/INSTALL.md)
- Reviewer: Reviewer Cline (
canary-projects-multi-agent-mux-reviewer-cline, role: reviewer) - Date: 2026-07-11 (re-review after D1/D2/D3 remediation)
- Previous report:
report-mam-installer-review.md(verdict: NOT PASS) - Files reviewed:
scripts/install_mam.sh(untracked, new),.agents/INSTALL.md(untracked, new) - Governing documents:
AGENTS.md,.agents/MULTI_AGENT_RULES.md/.ko.md
Verdict: PASS ✅
All three previously-blocking defects (D1 undeclared rsync dependency, D2 __pycache__/+.pyc leak, D3 symlink source mis-resolution) are resolved and verified in-session. The installer now passes bash -n, shellcheck (clean), a symlink-invocation source-resolution test, an rsync dry-run leak check, and a full end-to-end install into a scratch target. It conforms to AGENTS.md and MULTI_AGENT_RULES.md.
1. Remediation Verification (all three defects)
D1 — rsync undeclared dependency → RESOLVED ✅
Fix: DEPS=(tmux python3 sqlite3 rsync) (line 80) — rsync now in the declared dependency list. .agents/INSTALL.md §1 line 14 documents rsync as a prerequisite.
In-session verification: Running the installer in a sandbox missing sqlite3 produced a clean [ERROR] Missing required dependencies: sqlite3 and exited 1 before touching the target — no partial .agents/ created (post-install checks confirmed .agents/, .gitignore, and AGENTS.md all absent). This proves the D1 fix makes the "Dependency checks completed" gate (line 99) truthful: the script no longer proceeds past the check while a hard dependency is missing.
D2 — __pycache__/+.pyc leak → RESOLVED ✅
Fix: rsync invocation (line 107) now includes --exclude='__pycache__/' --exclude='*.pyc'.
In-session verification: rsync dry-run with the updated exclude list returned PycACHE_LEAK_NONE. Full end-to-end install find /tmp/.../.agents -name '__pycache__' -o -name '*.pyc' returned nothing. The target is no longer polluted with host-specific bytecode caches.
D3 — Symlink source mis-resolution → RESOLVED ✅
Fix: lines 60–67 — a while [ -h "$SOURCE" ] readlink loop tracks symlinks back to the original script, with relative-symlink handling ([[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE").
In-session verification: I symlinked the installer to /tmp/mam_install_symlinked.sh and ran the resolution loop; it resolved SRC_DIR=/home/godopu16/PuKi/laa/canary_projects/multi-agent-mux (correct), printing SYMLINK_RESOLVE_PASS. The previous failure (resolving to /) is gone.
2. Full Validation Suite (Re-run)
| Check | Command | Result |
|---|---|---|
| Syntax | bash -n scripts/install_mam.sh |
✅ BASH_N_OK |
| Lint | shellcheck -f gcc scripts/install_mam.sh |
✅ SHELLCHECK_CLEAN (0 findings) |
| D3 symlink resolve | loop on /tmp/...symlinked.sh |
✅ SRC_DIR=.../multi-agent-mux (SYMLINK_RESOLVE_PASS) |
| D2 leak dry-run | rsync --dry-run ... | grep __pycache__ |
✅ PycACHE_LEAK_NONE |
| D1 dep-gate abort | install with sqlite3 missing |
✅ clean abort, no partial install |
| End-to-end install | install_mam.sh --target /tmp/... |
✅ completes; INSTALL_MD_PRESENT, GITIGNORE_PRESENT, AGENTS_MD_PRESENT, PYCACHE_LEAK_CHECK_DONE (no leaks) |
INSTALL.md rsync doc |
grep -n rsync .agents/INSTALL.md |
✅ line 14 documents rsync |