Files
multi-agent-mux/.agents/reports/reviewer-grok-01/report-cc059645.md
T
GodopuandClaude Fable 5.1 9d52bb7024 docs(reports): archive v4.4.4 PASS review reports from claude, agy and grok (Issues #12, #8, #7)
Second-round reports of the fix/issue-12-8-7 review loop on ea911d7:
planner-reviewer-claude-01 (b368210a), reviewer-agy-01 (3f5d1cd4) and
reviewer-grok-01 (cc059645), all [VERDICT: PASS]. The codex review is
deferred until its usage limit resets; the branch merges only after it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
2026-09-13 12:47:31 +09:00

4.7 KiB

🔍 Review Report — Job cc059645 (fix/issue-12-8-7 2회차 @ ea911d7)

  • Reviewer: reviewer-grok-01 (role: reviewer) · 2026-09-13
  • 범위: git log/git diff 8a09e02...HEAD (루프 수집 diff 는 비어 있음)
  • HEAD: ea911d7 fix(issue-8,7): harden install_state merge and pin sibling-workspace edge cases
  • 1회차 HEAD: 4176d75 (grok PASS). 이번 초점: 0fedae2 (claude N1) + ea911d7 (비차단 권고)
  • 안전: 실제 .mam/jobs 에 scrub-secrets 미실행. 실제 홈 purge 없음. 소스 무변경. codex 세션 미접촉.

커밋: e629cc1 → 4176d75 → 0fedae2 → ea911d7. git diff --check 8a09e02...HEAD 클린.

(1) 0fedae2 N1 — scrub-secrets 값 기준 선택

_cmd_scrub_secrets (registry.py:360): "password" in broker → broker.get("password"). JSON null·빈 문자열·키 없음은 모두 falsy 라 목록에도 재기록에도 안 넣음. 값이 있는 문자열만 pop 후 _atomic_write_record. lock 범위는 그대로 전체 순회지만 쓰기는 비밀이 있는 레코드만.

test_scrub_secrets_cli_migrates_a_registry: dirty("leaked-earlier") 1건만 dry-run/실제 대상. password: null 레코드는 stdout 에 id 가 없고 파일 바이트 불변. 키 없는 clean 레코드도 불변. --dry-run 은 dirty 파일의 유출 문자열을 그대로 둠. 4176d75 에서는 null 키까지 세어 would scrub 2 가 났을 테스트.

_atomic_write_record 의 _scrub_record_secrets 는 여전히 키만 보면 pop — null 키는 다음 일반 쓰기 때 정리. scrub 가 901건을 재기록하지 않는 분업과 맞음.

문서: VERSIONS.md v4.4.4 항목 2, registry.md:60-62 가 “저장된 값만 / null 은 다음 쓰기”로 정합.

(2) ea911d7 #8 — install_state 병합 보강

deploy/update.sh:243-256:

  • 비어 있지 않고 마지막 바이트가 개행이 아니면 (tail -c1 + $(…) 가 trailing newline 을 지우는 관용) printf '\n' — 첫 병합 키가 마지막 줄에 붙지 않음.
  • case *=* 로 = 없는 줄 무시.
  • awk -F= -v k="$key" '$1 == k' 정확 문자열 비교. grep -q "^${key}=" 의 정규식 해석 없음.
  • 실패 restore_on_failure (:168-171) 는 세 파일 cp -f 그대로. 성공 경로만 변경.

test_issue8_update_state.py 실제 install→stale stamps→update.sh --force 통과(아래 스위트).

(3) ea911d7 #7 테스트 2건 — 실제 경로

test_idle_pane_in_a_later_workspace_is_reused: w1=4(overflow) + w2=1 + state["panes"] 에 agent 없는 w2:p_idle. mock pane list 는 에이전트 pane 에 agent 를 넣고 extra pane 은 안 넣으므로, lib.sh:771 not p.get('agent') 가 w2 에서 idle 을 고름. split/create 없음, agent start … --pane w2:p_idle. idle 우선이 깨지면 w2 split 으로 실패.

test_ws_label_rename_targets_only_the_chosen_workspace: 같은 4+1 에서 MAM_WS_LABEL=team-b. lib.sh:854-856 은 선택된 existing_ws 에만 workspace rename. 호출 로그가 정확히 ["workspace", "rename", "w2", "team-b"] — w1 이나 생성 경로 --label 이 아님.

(4) 1회차 PASS 회귀 + 락스텝

#12 to_registry_block password 제외, env 복원, G6 _cmd_scrub_secrets 예외, auth_token 유지. #7 후보 순회·overflow continue·단일 ws 동치. #8 성공 경로 version/hashes 비복원. 회귀 없음.

lib.sh/eager.py/8 SKILL.md/VERSIONS.md 개요·매트릭스 / README·BOOTSTRAP·MESSAGING = 4.4.4. 릴리스 커밋 4176d75 제목 유지. env -u MAM_VERSION 아래 verify_framework_version 통과. 현재 버전 안내 문서에 잔여 4.4.3 없음.

Non-blocking (1회차와 동일): 락스텝이 v4.4.3 품질 문장을 24/17 → 26/19 로 고친 것은 fae70c1 작업이지 이 베이스가 아님. v4.4.4 품질 불릿은 아직 “테스트 8개/issue7 3개” — 이후 테스트 2건·N1 보강은 changelog 항목 2·코드에만 반영. 기능 결함 아님.

(5) 테스트

env -u MAM_VERSION .venv/bin/python -m pytest -q \
  tests/test_issue7_workspace_packing.py tests/test_issue8_update_state.py \
  tests/test_issue12_registry_secrets.py tests/test_issue5_phase1_delegation.py \
  tests/test_issue5_phase2a_loop.py tests/test_herdr_shim_contract.py \
  tests/test_layout.py tests/test_deploy_layout.py tests/test_loop_cli.py \
  tests/test_issue5_phase4_runtime.py tests/test_version_consistency.py

244 passed in 134.54s (1회차 242 + #7 테스트 2). bash -n lib.sh/update.sh 클린. 전체 스위트 미실행.

종합

N1(null password 901건 재기록)은 값 기준으로 닫혔고, install_state 병합과 #7 idle/rename 경로가 테스트로 고정됐다. 1회차 PASS 항목 회귀 없음. 설계 재작업 불필요.

[VERDICT: PASS]