7.8 KiB
Cross-Code Review Report — Job b6fc4e5a (Re-review after fix)
- Job ID: b6fc4e5a
- Target:
multi-agent-mux-orc-onboardskill +orchestrator_uuidsexclusion gate inlib.sh - Reviewer: cline
- Context: Re-review of the same changeset reviewed in job e7c13ec2 (which returned NOT PASS). The implementer has since applied the fix recommended in that prior review.
- Scope: lint, behavior (동작성), loss (유실) of the uncommitted working-tree changeset:
M .agents/skills/lib.shM .gitignoreM deploy/gitea-ci.yml,M deploy/remove.sh?? .agents/skills/multi-agent-mux-orc-onboard/(SKILL.md + scripts/orc_onboard.sh)?? tests/test_orc_onboard.py
- Baseline commit:
1e1ab8c(changes uncommitted, reviewed against working tree)
1. Executive Summary
The prior review (job e7c13ec2) returned NOT PASS for two reasons: (a) the orc-onboard test suite was non-deterministic — test_o19/test_o33 failed 2/40 when run as a descendant of an orchestrator agent (the skill's own deployment context), and (b) stale test-pollution artifacts (d.db*, d.update*) were ungitignored in the repo root. The implementer has now fixed both issues:
MAM_AUTODETECT_FORCE_FAILtestability hook added todetect_nearest_agent()inorc_onboard.sh;test_o19/test_o33now set it → the autodetect-failure path is exercised deterministically regardless of process ancestry..gitignorenow includesd.db*andd.update*patterns.- Bonus: the prior review's minor "equals-form argv parsing" edge note (
-r=<uuid>) is also resolved — the regex now uses[[:space:]=]+(matches both space and=forms).
The full orc-onboard suite now passes 40/40 in both foreground and detached contexts (deterministic), and the lib.sh-dependent regression subset passes 69/69 (no regressions). The implementation logic — previously verified correct in e7c13ec2 — is unchanged in substance.
2. Fix Verification (delta from prior review e7c13ec2)
2.1 MAM_AUTODETECT_FORCE_FAIL hook — orc_onboard.sh:76-79
detect_nearest_agent() {
if [ "${MAM_AUTODETECT_FORCE_FAIL:-0}" = "1" ]; then
return 3
fi
...
Correctly placed at the top of detect_nearest_agent, before the process-tree walk, returning 3 (the autodetect-failure exit code). The hook is opt-in (defaults to 0), so the real autodetect-success path is unaffected — confirmed by test_o25–test_o31 still passing. This makes the autodetect-failure path testable without depending on live process ancestry.
2.2 Test updates — test_o19 (line 331), test_o33 (line 537)
Both now pass env={..., "MAM_AUTODETECT_FORCE_FAIL": "1"} and assert returncode == 3. This is the exact fix recommended in the prior report (one env hook + two test edits), applied surgically.
2.3 .gitignore — d.db* / d.update*
+ d.db*
+ d.update*
Addresses the prior review's hygiene recommendation. Verified no stray d.db*/d.update* files remain in the repo root after a clean test run.
2.4 Bonus: equals-form argv parsing (lines 120/123/126)
The prior review noted --id=<uuid> (equals form) parsed empty because the regex only handled the space form. The implementer widened it to [[:space:]=]+, handling both forms:
(-r|--session-id)[[:space:]=]+[^[:space:]]+(claude)--conversation[[:space:]=]+[^[:space:]]+(agy)(--id|--session-id)[[:space:]=]+[^[:space:]]+(cline)
Low-impact robustness improvement, consistent with the SKILL.md auto-detection spec.
3. Lint
| Check | Tool | Result |
|---|---|---|
orc_onboard.sh syntax |
bash -n |
✅ PASS |
lib.sh syntax |
bash -n |
✅ PASS |
orc_onboard.sh shellcheck |
shellcheck |
⚠️ Not installed locally; deploy/gitea-ci.yml adds the required shellcheck .../orc_onboard.sh line (covered by test_o35). CI gate covers it. |
lib.sh shellcheck |
shellcheck |
⚠️ Not installed locally (pre-existing, not introduced by this change). |
4. Behavior (동작성) — Test Results
4.1 tests/test_orc_onboard.py — DETERMINISTIC ✅
| Run context | Prior review (e7c13ec2) | This review (b6fc4e5a) |
|---|---|---|
| Foreground (pytest descendant of cline orchestrator session) | 38 passed, 2 failed | 40 passed (6.27s) |
| Detached / reparented to PID 1 | 40 passed | 40 passed (6.34s) |
The two previously-flaky tests (test_o19_autodetect_failure_exits_3, test_o33_no_workspace_cache_fallback) now pass deterministically in both contexts via the MAM_AUTODETECT_FORCE_FAIL hook. The non-determinism root cause (live process-tree ancestry) is bypassed for the failure-path tests, and the success-path tests (test_o25–test_o31) remain unaffected. Full suite: 40/40 PASS.
4.2 Regression (lib.sh-dependent suites) — PASS ✅
tests/test_uuid_target.py tests/test_b4_session_created.py tests/test_o1_rebuttal.py tests/test_deploy_layout.py tests/test_deploy_freshness.py tests/test_deploy_registry_merge.py → 69 passed in 103.07s. The lib.sh changes (orchestrator_uuids gate, verify_session_uuid/find_workspace_uuid exclusion, atomic_dump_yaml/load_state_json touchpoints) introduced no regressions — identical to the prior review's result.
5. Implementation Review (unchanged in substance from e7c13ec2; re-confirmed)
5.1 lib.sh — exclusion gate (correct)
_validateorchestrator_uuids: list, non-empty strings, no duplicates. ✅ (test_o20–test_o22)get_all_sessions_status:__orchestrator_uuids__sha256 entry for reconcile change detection. ✅mam_orchestrator_uuids(): cached;MAM_ORCHESTRATOR_UUIDSoverride (empty/JSON/comma) →MAM_STATE_JSON→ sqlite DB → YAML; malformed → stderr warning + degrade to[](open gate). ✅ (test_o40)mam_row_own_uuid(row): first non-null*_ownacross agent families. ✅verify_session_uuiddiscover exclusion:if mode=="discover" and uuid in mam_orchestrator_uuids() and uuid != mam_row_own_uuid(row): return False+workspace_key()normalization. ✅ (test_o39)find_workspace_uuiddiscovery: buildsorchestrator_ids, discards target's own UUID,emit()skipsrunning_ids ∪ orchestrator_ids. ✅ (test_o1–test_o16)
5.2 orc_onboard.sh (correct)
- Arg parsing,
is_valid_id(UUID + cline^[0-9]{10,}_[0-9A-Za-z]+$),--list, running-session conflict (exit 1),atomic_dump_yamlmutation. ✅ (test_o17/test_o18/test_o38) detect_nearest_agent(): process-tree walk, family basename match, argv-then-env extraction, stop at nearest agent ancestor,return 3on failure.MAM_AUTODETECT_FORCE_FAILhook short-circuits toreturn 3. ✅SKILL.mdfrontmatter + auto-detection hierarchy docs. ✅ (test_o37)
5.3 Deploy wiring
deploy/gitea-ci.yml (+shellcheck line) and deploy/remove.sh (+fallback_assets entry). ✅ (test_o34/test_o35)
6. Loss / Hygiene (유실)
- No orphaned call sites:
verify_session_uuid/find_workspace_uuidsignatures preserved; 69-test regression confirms backward compatibility. - Artifacts now gitignored:
d.db*/d.update*added to.gitignore; no stray files in repo root after a clean run. Prior hygiene issue resolved. - No regressions: lib.sh changes are behavior-preserving for non-orchestrator-uuid paths.
7. Verdict
The prior review's two blockers are both resolved:
- Non-deterministic test suite → fixed via
MAM_AUTODETECT_FORCE_FAILhook + updatedtest_o19/test_o33; suite now passes 40/40 deterministically in both foreground and detached contexts. - Ungitignored test-pollution artifacts → fixed via
.gitignored.db*/d.update*patterns.
A bonus robustness fix (equals-form argv parsing) was also applied. The implementation logic is correct, atomic, and regression-free (69/69). No design-level rework is needed.
[VERDICT: PASS] [VERDICT: PASS]