43 lines
3.5 KiB
Markdown
43 lines
3.5 KiB
Markdown
# 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` | |