Final-round reports of the fix/issue-10-11-13-15 review loop: planner-reviewer-claude-01
(aa16fa5c), reviewer-agy-01 (0f41ea47), reviewer-grok-01 (3ea06fb6) and
planner-reviewer-codex-01 (79204d61), all [VERDICT: PASS] on fae70c1.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
9.0 KiB
Peer Review Report: Branch fix/issue-10-11-13-15 & v4.4.3 Lockstep (Round 2 Cross-Review)
- Reviewer:
agy(herdr:reviewer-agy-01) - Job ID:
0f41ea47 - Target Branch:
fix/issue-10-11-13-15@fae70c1(basemain@bd3df89v4.4.2) - Commits Reviewed:
c82ea75—fix(issue-10,11,13,15): complete agy purge, orchestrator purge, workspace-anchored registry0282312—release(v4.4.3): bump framework and eight skills to 4.4.3 in lockstep7610258—fix(issue-13): refuse to purge the conversation the caller is running inf5a6575—test(issue-13): give each purge test fresh conversation idsfae70c1—fix(issue-10,13): check every agy artifact for holders and purge orphaned leftovers
- Review Date: 2026-09-13 (KST)
1. Executive Summary
Branch fix/issue-10-11-13-15 resolves issues #10, #11, #13, and #15 while integrating peer-review feedback across two review loops.
In loop 1 (round 1), codex identified two edge cases:
- R1:
agyin-use check passed only the main DB file tolsof, missing processes holding open the presence lock (or sidecars) without the UUID in command line arguments or environment variables. - R2: Orphaned leftovers (e.g. WAL, annotations, or presence lock surviving after an interrupted or pre-#10 purge where the main DB was already gone) failed to resolve as a purge target because resolution relied on DB existence.
Commit fae70c1 directly resolves both codex findings through:
AgyAgentAdapter.conversation_in_use: Passes all conversation paths (_artifact_paths: DB, sidecars, brain, annotation, presence lock) tolsof -t.AgyAgentAdapter.has_artifacts: Recognizes any existing artifact piece even if the primary DB has already been deleted.BaseAgentAdapter.has_artifacts: Replaces the resolver's ad-hoc path fallback with a clean polymorphic method defaulting touuid in path and os.path.exists(path), correctly preventingopencode(shared DB) from falsely claiming non-opencode UUIDs.
Together with caller session recognition (7610258) and dynamic test fixtures (f5a6575), the branch is complete, robust, and verified.
All 250 targeted tests across 9 test suites passed with zero failures and zero leaks into the live .mam/jobs registry.
2. In-Depth Technical Verification
(1) Codex R1 & R2 Solutions (fae70c1)
-
Codex R1 (
AgyAgentAdapter.conversation_in_use):def _artifact_paths(self, uuid: str, ctx: DiscoveryContext) -> list: db = self.artifact_path(uuid, ctx) root = self._cli_root(ctx) return ([db] + [f"{db}{suffix}" for suffix in ("-wal", "-shm", "-journal")] + [f"{root}/brain/{uuid}", f"{root}/annotations/{uuid}.pbtxt", f"{root}/presence/{uuid}.lock"]) def conversation_in_use(self, uuid: str, ctx: DiscoveryContext) -> bool: return conversation_in_use(uuid, self._artifact_paths(uuid, ctx))conversation_in_usepasses every associated file path tolsof -t. Even if a process holds open onlypresence/<uuid>.lock(or a-walsidecar) viaflockand carries neither the UUID inpscommand-line arguments nor any session environment variable,lsofcatches the active file descriptor and refuses the purge. Verified bytests/test_issue10_13_purge.py::test_purge_cli_refuses_when_only_the_presence_lock_is_held_open. -
Codex R2 (
AgyAgentAdapter.has_artifacts& Orphan Resolution):def has_artifacts(self, uuid: str, ctx: DiscoveryContext) -> bool: return any(os.path.exists(p) for p in self._artifact_paths(uuid, ctx))If the main DB was previously unlinked or deleted, any remaining orphaned WAL files, annotations, or presence locks are recognized by
has_artifacts._resolve_purge_targetcorrectly identifiesagyas the owning agent and purges the stranded artifacts completely. Verified bytests/test_issue10_13_purge.py::test_purge_cli_resolves_agy_from_orphaned_leftovers. -
BaseAgentAdapter.has_artifactsDefault Contract & Resolver Integration: Inlib_py/agents/base.py:def has_artifacts(self, uuid: str, ctx: DiscoveryContext) -> bool: path = self.artifact_path(uuid, ctx) return uuid in path and os.path.exists(path)In
lib_py/agents/__main__.py_resolve_purge_target:for name, adapter, ctx in probes: try: if adapter.has_artifacts(uuid, ctx): return name, adapter, ctx except Exception: continue- Shared Store Isolation:
opencodeuses a shared database path (opencode.db) which does not embed the UUID (uuid in pathisFalse). Thusopencodenever falsely claims other agents' UUIDs in the fallback pass. - Other Adapters (
claude,hermes,grok,codex): All embed the UUID in their artifact paths (f".../{uuid}.jsonl", etc.). Their resolution behavior remains identical to the historical contract.
- Shared Store Isolation:
(2) Caller Session Protection (7610258) & Dynamic Fixtures (f5a6575)
AGENT_SESSION_ENVVerification: InspectsCLAUDE_CODE_SESSION_ID,ANTIGRAVITY_CONVERSATION_ID,HERMES_SESSION_ID,GROK_SESSION_ID, andOPENCODE_SESSION_ID. If the caller's environment carries the target UUID,conversation_in_useimmediately returnsTrue.- Helper-Chain Pruning (
_is_agent_cli): Excludes the purge command's own non-agent helper processes (python interpreter, shell runners) but halts exclusion at the nearest agent CLI ancestor (claude,agy,hermes,grok,opencode,codex). If that agent CLI ancestor carries the UUID on its command line, it is treated as an active holder. - Dynamic Test Fixtures (
f5a6575): All purge tests intest_issue10_13_purge.pyuse dynamicuuid4fixtures (convandother), preventing false "in use" detections caused by concurrent delegation wrappers whose command-line prompts carry test file diffs.
(3) orc_onboard.sh Flow & Documentation Alignment
- Purge executes before registry mutation. A refused purge (exit code
5due to in-use detection) leaves.mam/agent-sessions.yamluntouched. - Confirmation gate (
--yes) prevents accidental deletion (exit code4). - Missing on-disk artifacts emit a warning and cleanly remove the UUID registration (exit code
0). - Past-tense grammatical correction maps
add -> added,remove -> removed, eliminating theremoveedtypo. - Full alignment with
multi-agent-mux-orc-onboard/SKILL.mdandVERSIONS.mdv4.4.3.
(4) Registry & Audit Log Resolution (#15)
default_registry_dir()andget_logs_dir()prioritizeMAM_JOBS_DIR/DELEGATE_JOB_LOGS_DIR→$WORKSPACE_ROOT/.mam/...→<cwd>/.mam/....job_subscriber.pyargument default updated todefault_registry_dir().- Verified zero test jobs leaked into
.mam/jobsduring test suite runs.
(5) Version Lockstep Completeness (v4.4.3)
MAM_VERSION="4.4.3"in.agents/skills/lib.sh.FRAMEWORK_VERSION = "4.4.3"in.agents/skills/lib_py/loop/eager.py.- 8
SKILL.mdfrontmatter versions:4.4.3. VERSIONS.md: Current releasev4.4.3, 8-row skills matrix4.4.3, and changelog section updated to document codex R1/R2 and claude N1 refinements.- Documentation badges in
README.md,README.ko.md,BOOTSTRAP.md,BOOTSTRAP.ko.md, andMESSAGING.mdheader all synchronized. - Verified no non-historical
4.4.2references remain.
3. Test Suite Verification Results
All tests executed with active MQTT heartbeat tracking:
| Test Suite | Result | Details |
|---|---|---|
tests/test_issue10_13_purge.py |
23/23 PASS | Includes presence lock holder test (R1) & orphaned leftover purge test (R2) |
tests/test_issue15_registry_isolation.py |
7/7 PASS | Resolution hierarchy & onboarding leak prevention |
tests/test_orc_onboard.py |
37/37 PASS | Onboarding CLI, remove, past tense message, ownership verification |
tests/test_a4_adapter_contract.py |
33/33 PASS | Agent adapters contract compliance, 2-item purge base invariant |
tests/test_version_consistency.py |
3/3 PASS | 3-way version lockstep, runtime mismatch rejection, env immutability |
tests/test_issue5_phase1_delegation.py |
66/66 PASS | Delegation CLI, snapshot contracts, event publishing |
tests/test_tier1_unit.py |
53/53 PASS | Unit tests, path resolution, B-9 logs directory |
tests/test_loop_cli.py |
9/9 PASS | Loop CLI parsing, creator requirement, planner auto-resolution |
tests/test_issue5_phase4_runtime.py |
5/5 PASS | Python core loop runtime execution & lifecycle |
| Total Targeted Tests | 250/250 PASS | All 250 tests passed cleanly (0 failures, 0 regressions) |
Live Registry Immutability Audit
- Pre-test and post-test inspections of
.mam/jobsconfirmed that zero test job records were written to the real repository registry.
4. Conclusion
The refinements in fae70c1 thoroughly and elegantly address codex review findings R1 and R2 without introducing any regressions or architectural friction. All six review criteria are completely satisfied.
[VERDICT: PASS]