- create_session.sh: add explicit case fallback for delegate_agent (R1) - lib_py.agents: add spawn-spec, resume-spec, exit-key argv CLI subcommands (R2) - resume_session.sh, stop_session.sh: replace python string interpolation with safe argv subcommands (R2) - stop_session.sh: dynamically iterate adapter.identity_cache_fields (R3) - verify_session.py, workspace_uuid.py: remove dead imports (R9/N4) - tests/test_a4_adapter_contract.py: add CLI bridge subcommand, clean-env PYTHONPATH safety, and fallback contract tests (R12/N1) - SKILL.md, docs, logs: synchronize IMPROVEMENTS.md, LOG.md, and resolve_session_id wording (R8/R10/R11) - promote verified peer review reports for cline (e7b9812b) and claude (31730364)
16 KiB
📋 Cross-Code Review Report: A-4 Phase 2 (P3-1) + v2.0.0 + resolve_session_id.sh Cleanup
- Job ID:
e7b9812b - Reviewer: cline (session: herdr:canary-projects-multi-agent-mux-creator-cline)
- Role: Reviewer
- Review Subject: A-4 Phase 2 (P3-1 M2~M7 agent knowledge migration & Option B isolation removal) + v2.0.0 skill version standardization + resolve_session_id.sh usage text cleanup
- Commits Reviewed:
b4821fa(feat) +7708d3a(docs) + uncommitted working-tree change (resolve_session_id.sh) - Report Path:
.mam/jobs/e7b9812b/cline-reports/report-final.md
1. Executive Summary
This review covers the complete A-4 Phase 2 architectural refactor (commit b4821fa), the v2.0.0 skill version standardization (commit 7708d3a), and a follow-up usage text cleanup (resolve_session_id.sh, uncommitted). The refactor centralizes all agent-specific knowledge into a clean adapter pattern (BaseAgentAdapter + 4 concrete adapters) and completes Option B by removing all isolation.root consumers (C-3b).
Full 259/259 test suite passes (100%) — including all unit, component, contract, deployment, integration, and E2E tests. This is the first review to run the complete suite to completion (prior reviews were limited by the 30s tool timeout; this review used background execution for shell-heavy tests).
No lint, operability, or loss issues found. All orphan checks pass, all syntax checks pass, all adapter runtimes verified, facts bridge hardened with shlex.quote. Minor documentation inconsistencies in IMPROVEMENTS.md roadmap table noted as non-blocking observations.
2. Scope — Files Changed
Commit b4821fa (21 files, +905/-532)
| File | Change | Category |
|---|---|---|
lib_py/agents/base.py |
+53: DiscoveryContext, SpawnSpec, abstract interface |
Core |
lib_py/agents/__main__.py |
+16: shlex.quote facts bridge, 8 MAM_* vars |
Core |
lib_py/agents/adapters/agy.py |
+90: full adapter impl | Adapter |
lib_py/agents/adapters/claude.py |
+103: full adapter impl | Adapter |
lib_py/agents/adapters/cline.py |
+82: full adapter impl | Adapter |
lib_py/agents/adapters/hermes.py |
+90: full adapter impl | Adapter |
lib_py/verify_session.py |
-116: delegate to adapter.verify_artifact() |
Simplify |
lib_py/workspace_uuid.py |
-128: delegate to adapter.discover() |
Simplify |
lib_py/atomic_yaml.py |
-4: remove isolation validation |
Cleanup |
lib.sh |
-76: remove mam_session_iso_root, generalize wait_for_tui_ready |
Core |
create_session.sh |
+29: adapter spawn_spec + delegate_agent_key |
Migration |
reconcile.sh |
-40: adapter get_adapter/own_key/spawn_spec |
Migration |
resume_session.sh |
-31: remove _iso_root, adapter resume_spec |
Migration |
stop_session.sh |
-99: adapter purge_artifacts/exit_key/cache_fields |
Migration |
tests/test_a4_adapter_contract.py |
+213: 9 new contract tests | Test |
tests/test_orc_onboard.py |
-14: remove obsolete isolation tests | Test |
tests/test_tier2_component.py |
-24: remove isolation path guard test | Test |
tests/test_uuid_target.py |
-38: remove test_t11_legacy_isolation_row |
Test |
IMPROVEMENTS.md |
+14: A-4 + C-3b completion, counts | Docs |
LOG.md |
+22: P3-1 detailed entry | Docs |
Commit 7708d3a (8 SKILL.md files, +24/-8)
- All 8 SKILL.md:
version: 2.0.0✅ (verified) - delegate-job + orc-onboard: enhanced frontmatter (author, environments, metadata)
Uncommitted Working-Tree Change (resolve_session_id.sh, +1/-2)
- Usage text: removed outdated "isolation root" reference (2 lines → 1 line)
- This addresses the "minor observation #1" from prior review job
9cf96c56
3. Architecture Verification — Adapter Layer ✅
3.1 BaseAgentAdapter (base.py)
Abstract base class with complete interface:
- Properties:
name,own_key,ready_tokens,exit_key,delegate_agent_key,identity_cache_fields(allNotImplementedError) - Optional properties:
input_prompt,input_placeholder,input_rule_pattern(defaultNone) - Methods:
artifact_path(),verify_artifact(),purge_artifacts(),spawn_spec(),resume_spec(),auth_ok(),discover() - Helpers:
derive_session_name(),matches_session_name(),verify_session()(default impls) - DiscoveryContext: workspace, agent_name, home_dir, claude_dir, epoch, row, mode +
ws_key/cwdproperties
3.2 All 4 Adapters Complete ✅ (Runtime Verified)
| Adapter | spawn_spec | ready_tokens | exit_key | delegate_agent_key |
|---|---|---|---|---|
| claude | claude --dangerously-skip-permissions --session-id <uuid> |
Anthropic|Assistant|Chat|Welcome |
/exit |
claude-code |
| agy | agy --dangerously-skip-permissions |
Antigravity |
Exit |
antigravity-cli |
| cline | cline -i |
Cline|history|Chat|... |
/exit |
cline-agent |
| hermes | hermes |
Hermes |
/exit |
hermes-agent |
All verified at runtime via get_adapter('<name>').spawn_spec(...) / .resume_spec(...) ✅
3.3 Facts Bridge Hardening ✅ (Eval-Safe)
- 8
MAM_*variables emitted withshlex.quote()✅ eval "$(python -m lib_py.agents facts claude)"underset -euo pipefail→ rc=0 ✅test_facts_bridge_eval_contractPASSED ✅- Orphan check: zero production refs to old
AGENT_NAME=/OWN_KEY=names ✅
3.4 Circular Import Safety ✅
base.pymodule-level import;verify_session.pyfunction-level (lazy) import — no circular dependency ✅
4. Option B (C-3b) — Isolation Root Removal ✅
4.1 Removed Consumers
| Consumer | Location | Status |
|---|---|---|
mam_session_iso_root() |
lib.sh | ✅ Removed |
iso_root branch |
verify_session.py | ✅ Removed |
iso_root_of |
workspace_uuid.py | ✅ Removed |
isolation validation |
atomic_yaml.py | ✅ Removed |
| Legacy purge block | stop_session.sh | ✅ Replaced by adapter.purge_artifacts() |
_iso_root/CLAUDE_ID_FLAG |
resume_session.sh | ✅ Replaced by adapter.resume_spec() |
4.2 Orphan Checks ✅
grep -rn 'mam_session_iso_root|iso_root_of|_iso_root'in production code → zero refs ✅grep -rn 'isolation'inatomic_yaml.py→ zero refs ✅test_o11_isolation_root_respectedremoved fromtest_orc_onboard.py✅lib.sh:1340comment: documentation explaining removal ("were completely deprecated and removed") — not active code ✅
4.3 Tests Removed (consistency) ✅
test_t11_legacy_isolation_row— testedisolation.rootresolution (obsolete)test_comp_stop_safe_path_checking— tested isolation path guard (obsolete)- orc_onboard
test_o11_isolation_root_respected— tested iso_root respect (obsolete)
5. Shell Script Migration ✅
| Script | Key Change | Fallback |
|---|---|---|
create_session.sh |
CMD_FULL from adapter.spawn_spec() |
hardcoded case/esac ✅ |
resume_session.sh |
CMD_FULL from adapter.resume_spec() |
hardcoded case/esac ✅ |
reconcile.sh |
_get_own_key() + adapter.spawn_spec() |
— |
stop_session.sh |
adapter.exit_key + adapter.purge_artifacts() |
— |
lib.sh |
wait_for_tui_ready uses MAM_READY_TOKENS |
self-contained fallback ✅ |
All scripts have graceful degradation via hardcoded case/esac fallbacks ✅
6. resolve_session_id.sh Working-Tree Change ✅
The uncommitted change updates the usage text to remove the outdated "isolation root" reference:
- --session scopes resolution to that registry row — required for sessions
- created with --isolate (their conversation lives only in the row's isolation root).
+ --session scopes resolution to that specific registry row.
bash -nsyntax check: ✅ OK- Zero remaining
isolationreferences in the file ✅ --sessionflag behavior unchanged (still callsfind_workspace_uuid) ✅- This is a correct documentation fix that aligns with the Option B removal
7. Syntax & Static Analysis ✅
| File | Check | Result |
|---|---|---|
resolve_session_id.sh |
bash -n |
✅ OK |
lib.sh |
bash -n |
✅ OK |
create_session.sh |
bash -n |
✅ OK |
resume_session.sh |
bash -n |
✅ OK |
stop_session.sh |
bash -n |
✅ OK |
reconcile.sh |
bash -n |
✅ OK |
lib_py/**/*.py |
pytest collection |
✅ 259 collected, 0 import errors |
8. Full Test Verification — 259/259 PASS ✅
This review ran the complete test suite to completion for the first time (prior reviews were limited by the 30s tool timeout; this review used background execution for shell-heavy tests).
| Suite | Tests | Time | Result |
|---|---|---|---|
| test_tier1_unit + test_a4_adapter_contract + test_orc_onboard + test_workspace_scope | 77 | 12.78s | ✅ PASS |
| test_deploy_freshness | 9 | 12.48s | ✅ PASS |
| test_b7 + test_b8 + test_o2 + test_o3 | 70 | 21.43s | ✅ PASS |
| test_b4 + test_herdr_shim_contract + test_o1 + test_sanitize + test_sanity | 41 | 18.76s | ✅ PASS |
| test_uuid_target + test_tier2 + test_deploy_layout + test_deploy_registry_merge | 52 | 167.87s | ✅ PASS |
| test_tier3_integration + test_tier4_e2e | 10 | 131.99s | ✅ PASS |
| TOTAL | 259 | ~365s | ✅ 100% PASS |
Coverage by Category (per brief requirement)
- Unit tests: test_tier1_unit (27), test_sanity (2), test_b4 (8), test_b7 (20), test_b8 (1) ✅
- Component tests: test_tier2_component (26) ✅
- Contract tests: test_a4_adapter_contract (9), test_herdr_shim_contract (5), test_o1_rebuttal (11) ✅
- Deployment tests: test_deploy_freshness (9), test_deploy_layout (5), test_deploy_registry_merge (10) ✅
- Integration tests: test_tier3_integration (5) ✅
- E2E tests: test_tier4_e2e (5) ✅
- Guard tests: test_o2 (22), test_o3 (27) ✅
- Scope tests: test_workspace_scope (2), test_uuid_target (13), test_orc_onboard (36) ✅
- Sanitize tests: test_sanitize_and_mock_errors (3) ✅
9. SKILL.md v2.0.0 Standardization ✅
All 8 SKILL.md files verified at version: 2.0.0:
- multi-agent-mux-create ✅
- multi-agent-mux-delegate-job ✅ (enhanced frontmatter: author, environments)
- multi-agent-mux-loop ✅
- multi-agent-mux-monitor ✅
- multi-agent-mux-orc-onboard ✅ (enhanced frontmatter)
- multi-agent-mux-resume ✅
- multi-agent-mux-status ✅
- multi-agent-mux-stop ✅
test_o37_skill_md_valid PASSED ✅ (validates frontmatter structure)
10. Documentation Review
10.1 Correctly Updated ✅
- IMPROVEMENTS.md:3 — 최종 갱신일 2026-08-16, P3-1/A-4 Phase 2 완료 ✅
- IMPROVEMENTS.md:5 — 미해결 6건 (arch 1, edge 4, orch 0, legacy 1) ✅
- IMPROVEMENTS.md:6 — 완료 19건 (A-4, C-3b added) ✅
- IMPROVEMENTS.md:22 — A-4 marked "✅ 완료 — P3-1" ✅
- IMPROVEMENTS.md:319 — C-3b marked "✅ 완료 — P3-1 / Option B" with full detail ✅
- LOG.md — P3-1 detailed entry ✅
10.2 Minor Inconsistencies (Non-Blocking) ⚠️
The planner's §8 explicitly instructed updating these, but b4821fa only partially addressed them. They are documentation-only and do not affect code correctness:
- IMPROVEMENTS.md:107 — §4 header says "레거시 잔재 2건" but should be "1건" (C-3b completed; only C-6 remains). Header line 5 correctly says "1건".
- IMPROVEMENTS.md:109-110 — C-3b still listed in §4 as "보류" (deferred) with old "되살린 코드" (revived code) description. Should be moved to §5 (completed). Line 319 already has the completion note, but §4 entry was not removed.
- IMPROVEMENTS.md:117 — §5 header says "14건" but should reflect actual count (19 per line 6). This is a pre-existing inconsistency the planner noted in §8 item 9 — it was not fixed.
- IMPROVEMENTS.md:252 — Roadmap P3-1 row says "진행 중" (in progress) but should be "✅ 완료". The planner's §8 item 10 explicitly asked to update lines 252-254.
- IMPROVEMENTS.md:254 — Roadmap P3-3 (C-3b) row has no completion marker, but C-3b is completed.
These are non-blocking because: (a) the critical header lines and detail sections are correctly updated, (b) the roadmap table and §4/§5 sub-headers are stale summaries, not functional documentation, (c) they don't affect code correctness, test results, or runtime behavior.
11. Lint / Operability / Loss Analysis
11.1 Lint ✅
- All 6 shell scripts pass
bash -n✅ - All Python modules collect without import errors ✅
- No
shellcheckavailable (macOS) — static analysis limited tobash -n - No flake8 run (not in venv), but
test_o36_bash_syntax_cleanPASSED ✅
11.2 Operability ✅
- All 4 adapter runtimes produce correct spawn/resume commands ✅
- Facts bridge eval-safe under
set -euo pipefail✅ - Shell scripts have hardcoded case/esac fallbacks for adapter failures ✅
lib.sh:1340documentation comment correctly explains the Option B removal ✅resolve_session_id.shstill correctly delegates tofind_workspace_uuid✅
11.3 Loss ✅
- Zero production-code references to removed symbols (
mam_session_iso_root,iso_root_of,_iso_root) ✅ - Zero
isolationreferences inatomic_yaml.py✅ - Removed tests (
test_t11,test_o11,test_comp_stop_safe) are obsolete (tested removed behavior) ✅ - New
test_a4_adapter_contract.py(9 tests) pins the new adapter contract ✅ - No functional regression (259/259 PASS) ✅
12. Minor Observations (Non-Blocking)
-
IMPROVEMENTS.md roadmap/section headers stale (§10.2 above) — 5 documentation inconsistencies. Non-blocking; the critical content (header lines 3/5/6, detail at lines 22/319) is correct. Recommend a follow-up doc-sync commit to update §4 header (107), remove C-3b from §4 (109-110), update §5 header count (117), and mark P3-1/P3-3 as completed in roadmap (252/254).
-
resolve_session_id.sh change uncommitted — the working-tree change is a correct cleanup but has not been committed yet. Recommend committing it as a follow-up to close the loop on the "minor observation #1" from job
9cf96c56. -
hermes adapter untested at runtime — hermes is not installed on this machine;
auth_ok/discoverpaths cannot be physically verified. However, the adapter contract tests (test_h1_to_h8,test_h9_h10) validate the interface. This is a known limitation documented in the planner's §9.1.
13. Limitations
- macOS only:
pytest-xdistnot installed; tests run serially. Linux/CI environment not verified. - shellcheck not available: static shell analysis limited to
bash -n. - flake8 not run: not in venv; relied on
test_o36_bash_syntax_cleanfor bash and pytest collection for Python import validation. - hermes uninstalled: physical verification of hermes adapter runtime paths not possible.
- Background test execution: shell-heavy tests (52+10=62 tests) ran in background over ~5 minutes; output captured from
/tmp/pytest_heavy.logand/tmp/pytest_tier34.log.
14. Conclusion
The A-4 Phase 2 refactor is a clean, well-structured architectural migration that:
- Centralizes all agent-specific knowledge into a clean adapter pattern (4 concrete adapters + abstract base)
- Completes Option B (C-3b) by removing all
isolation.rootconsumers - Hardens the facts bridge with
shlex.quotefor eval safety - Standardizes all 8 SKILL.md files to v2.0.0
- Adds 9 new contract tests pinning the adapter interface
All 259 tests pass (100%) — unit, component, contract, deployment, integration, and E2E. No lint, operability, or loss issues found. The only findings are minor documentation inconsistencies in IMPROVEMENTS.md roadmap table (non-blocking) and the resolve_session_id.sh change being uncommitted (a correct fix pending commit).
The implementation does not require design changes or replanning. The minor documentation gaps are fixable with a simple doc-sync commit.
[VERDICT: PASS]