[Follow-up] Issue #9·#14 리뷰 비차단 권고 묶음 — 전달 확인·생존 판정의 빈틈 8건 (denylist 보강, pane 변화 신호 오탐, ack 토큰 고정, busy 토큰 필터, Terminated 잡음, fail-close 시간 문서화, events.log 의미, codex 무응답 e657c660) #16

Open
opened 2026-09-12 22:56:33 +00:00 by Godopu · 0 comments
Owner

개요 (Summary)

Issue #9·#14 를 해결한 fix/issue-9-14(v4.4.2, HEAD 9e1f0b6) 리뷰 루프에서 리뷰어 4명(claude·agy·grok·codex)이 PASS 판정과 함께 남긴 비차단 권고와, 2회차 반복에서 관측된 codex 무응답 사례를 하나의 후속 과제로 묶습니다. 모두 같은 코드 영역 — send_keys_safe 의 전달 확인과 위임 래퍼의 생존(liveness) 판정 — 에 걸친 빈틈·문서화 누락이며, 현재 동작이 깨져 있는 것은 아닙니다.

근거 리포트: .agents/reports/planner-reviewer-claude-01/report-2d3f24e4.md §3, .agents/reports/reviewer-grok-01/report-d7e66053.md §4, .agents/reports/planner-reviewer-codex-01/report-0ad7cb06.md, 1회차 .mam/jobs/df9215c6/codex-reports/report-final.md "Non-blocking".


항목 (Items)

1. 서버 env denylist 보강 — 추가 런타임 마커

  • 위치: .agents/skills/lib.sh:236 (deny = (...))
  • 내용: grok 리뷰가 CLAUDE_CODE_SSE_PORT 미포함을 지적. 현재 목록은 이번 실측에서 관측된 마커 + orc_onboard.sh 가 아는 family id 만 담고 있음. Claude Code 및 다른 에이전트 CLI 의 호스트/세션 마커를 한 번 더 조사해 보강(단, 설정값은 계속 상속).

2. send_keys_safe 의 "pane 변화" 전달 신호 오탐 가능성

  • 위치: .agents/skills/lib.sh:2548 (accepted 제출 후 cur_pane != rpc_pre_pane 이면 전달로 인정)
  • 내용: 화면 리사이즈·모달 팝업·이전 턴의 애니메이션 등 프롬프트 제출과 무관한 변화도 전달 신호로 읽힐 수 있음(codex·claude 리뷰 공통 지적). busy 토큰·working 상태에 비해 약한 신호이므로, 입력 영역 변화 제외·모달 토큰 재검사 등으로 좁히거나 마지막 수단으로만 쓰도록 검토.
  • 관련 사례 (항목 8): 2회차 루프 반복 2 에서 codex 리뷰 job e657c660 이 주입 성공으로 처리됐으나 codex 대화 기록에 해당 프롬프트 흔적이 없고 4분간 이벤트가 없어 deadline_timeout 으로 닫힘. 이 신호의 오탐이었을 가능성이 있음.

3. _inject_acknowledged 의 dispatch 토큰 미고정

  • 위치: multi-agent-mux-delegate-job:577
  • 내용: pending 이 아닌 어떤 상태든 "에이전트가 받았다"로 봄. 외부 취소·오류 등 에이전트가 아닌 기록자의 전이도 같은 조건을 만족(codex 1회차 지적). 이후 터미널 처리가 error/cancelled 를 성공으로 바꾸지는 않지만, 판정을 현재 dispatch 의 dispatch_token/attempt_id 에 고정하면 더 정확함.

4. _agent_still_working 의 busy 토큰 필터

  • 위치: multi-agent-mux-delegate-job:596
  • 내용: pane 최근 8줄의 esc to interrupt 문자열만 보므로, 인용된 옛 출력이나 도움말 텍스트에 같은 문구가 남아 있어도 "작업 중"으로 읽힘. 대기는 벽시계로 유한하지만 판정 정밀도를 높일 여지 있음(예: 상태 줄 위치·스피너 패턴 결합).

5. _within_deadline 의 "Terminated" 출력 잡음

  • 위치: multi-agent-mux-delegate-job:606
  • 내용: 마감 시 프로브 프로세스를 kill 하면 셸이 Terminated 를 stderr 에 찍어 래퍼 로그를 어지럽힘. 동작 문제는 없음. wait 전 리다이렉트나 disown/서브셸로 정리.

6. 무응답 잡 fail-close 시간 증가를 계약 문서에 명시

  • 위치: multi-agent-mux-delegate-job:743-754 (R1 유예 창), 계약 문서 .agents/MULTI_AGENT_RULES.md "Timeout Configuration" 및 docs/contracts/issue-6/*
  • 내용: Issue #6 은 무응답 잡을 IDLE_TIMEOUT + 5s 에 닫는다고 약속했으나, 디스크 heartbeat 유예 도입 후 실제로는 마지막 와이어 이벤트 기준 약 2 × IDLE_TIMEOUT(구독자 idle 대기 + 유예 창)이며 heartbeat 간격도 최대 약 2 × IDLE_TIMEOUT 까지 허용됨. VERSIONS.md v4.4.2 에는 적혀 있으나 규칙·계약 문서는 아직 이전 값. 문서를 갱신하거나 창 크기를 별도 knob 으로 분리.

7. events.log 의 의미 문서화

  • 위치: lib_py/delegation/registry.append_event docstring, MESSAGING.md
  • 내용: ebe58f6 이후 events.log 는 브로커 발행 전에 기록되므로 "수락된(ACK 된) 이벤트"가 아니라 "시도된 이벤트"의 기록(CAS 에서 거부된 발행분 포함). 이 파일을 상태 판단에 쓰는 코드가 생기지 않도록 한 줄 명시.

8. codex 무응답 사례 조사 (e657c660)

  • 관측: 2026-09-12 17:30:18Z 등록 → 주입 성공 처리 → codex 이벤트 0건 → 17:34:21Z deadline_timeout. ~/.codex/sessions 의 codex 대화 기록에 job id 가 전혀 등장하지 않음. 반복 3 에서는 같은 세션이 정상 리뷰(0ad7cb06, PASS).
  • 가설: (a) 항목 2 의 오탐(모달 등이 입력을 삼킨 뒤 화면만 변화), (b) herdr 가 codex 의 working 을 보고하지 않아 wait_for_agent_idle 이 턴 도중에도 idle 로 판단, 이전 턴이 끝나기 전에 프롬프트가 주입됨. 재현 시 pane 캡처·herdr 상태를 함께 남기는 진단 로그 추가 검토.

참고

  • 리뷰어 공통 확인 사항: 위 항목들은 모두 비차단으로 분류됐고, 브랜치는 만장일치 PASS·전체 스위트 819/819 통과 상태.
  • 우선순위 제안: 2·8(오탐/무응답) > 3·4(판정 정밀도) > 6·7(문서) > 1·5(보강/정리).

환경 정보 (Environment)

  • OS: macOS (Darwin 25.6.0), herdr 0.9.0
  • MAM Version: v4.4.2 (fix/issue-9-14 @ 9e1f0b6, main 4d444ce 위)
  • Agent: codex (planner-reviewer-codex-01, gpt-6-astra high) 외 claude/agy/grok
## 개요 (Summary) Issue #9·#14 를 해결한 `fix/issue-9-14`(v4.4.2, HEAD `9e1f0b6`) 리뷰 루프에서 리뷰어 4명(claude·agy·grok·codex)이 **PASS 판정과 함께 남긴 비차단 권고**와, 2회차 반복에서 관측된 codex 무응답 사례를 하나의 후속 과제로 묶습니다. 모두 같은 코드 영역 — `send_keys_safe` 의 전달 확인과 위임 래퍼의 생존(liveness) 판정 — 에 걸친 빈틈·문서화 누락이며, 현재 동작이 깨져 있는 것은 아닙니다. 근거 리포트: `.agents/reports/planner-reviewer-claude-01/report-2d3f24e4.md` §3, `.agents/reports/reviewer-grok-01/report-d7e66053.md` §4, `.agents/reports/planner-reviewer-codex-01/report-0ad7cb06.md`, 1회차 `.mam/jobs/df9215c6/codex-reports/report-final.md` "Non-blocking". --- ## 항목 (Items) ### 1. 서버 env denylist 보강 — 추가 런타임 마커 - **위치**: `.agents/skills/lib.sh:236` (`deny = (...)`) - **내용**: grok 리뷰가 `CLAUDE_CODE_SSE_PORT` 미포함을 지적. 현재 목록은 이번 실측에서 관측된 마커 + `orc_onboard.sh` 가 아는 family id 만 담고 있음. Claude Code 및 다른 에이전트 CLI 의 호스트/세션 마커를 한 번 더 조사해 보강(단, 설정값은 계속 상속). ### 2. `send_keys_safe` 의 "pane 변화" 전달 신호 오탐 가능성 - **위치**: `.agents/skills/lib.sh:2548` (accepted 제출 후 `cur_pane != rpc_pre_pane` 이면 전달로 인정) - **내용**: 화면 리사이즈·모달 팝업·이전 턴의 애니메이션 등 프롬프트 제출과 무관한 변화도 전달 신호로 읽힐 수 있음(codex·claude 리뷰 공통 지적). busy 토큰·`working` 상태에 비해 약한 신호이므로, 입력 영역 변화 제외·모달 토큰 재검사 등으로 좁히거나 마지막 수단으로만 쓰도록 검토. - **관련 사례 (항목 8)**: 2회차 루프 반복 2 에서 codex 리뷰 job `e657c660` 이 주입 성공으로 처리됐으나 codex 대화 기록에 해당 프롬프트 흔적이 없고 4분간 이벤트가 없어 `deadline_timeout` 으로 닫힘. 이 신호의 오탐이었을 가능성이 있음. ### 3. `_inject_acknowledged` 의 dispatch 토큰 미고정 - **위치**: `multi-agent-mux-delegate-job:577` - **내용**: `pending` 이 아닌 어떤 상태든 "에이전트가 받았다"로 봄. 외부 취소·오류 등 에이전트가 아닌 기록자의 전이도 같은 조건을 만족(codex 1회차 지적). 이후 터미널 처리가 error/cancelled 를 성공으로 바꾸지는 않지만, 판정을 현재 dispatch 의 `dispatch_token`/`attempt_id` 에 고정하면 더 정확함. ### 4. `_agent_still_working` 의 busy 토큰 필터 - **위치**: `multi-agent-mux-delegate-job:596` - **내용**: pane 최근 8줄의 `esc to interrupt` 문자열만 보므로, 인용된 옛 출력이나 도움말 텍스트에 같은 문구가 남아 있어도 "작업 중"으로 읽힘. 대기는 벽시계로 유한하지만 판정 정밀도를 높일 여지 있음(예: 상태 줄 위치·스피너 패턴 결합). ### 5. `_within_deadline` 의 "Terminated" 출력 잡음 - **위치**: `multi-agent-mux-delegate-job:606` - **내용**: 마감 시 프로브 프로세스를 `kill` 하면 셸이 `Terminated` 를 stderr 에 찍어 래퍼 로그를 어지럽힘. 동작 문제는 없음. `wait` 전 리다이렉트나 `disown`/서브셸로 정리. ### 6. 무응답 잡 fail-close 시간 증가를 계약 문서에 명시 - **위치**: `multi-agent-mux-delegate-job:743-754` (R1 유예 창), 계약 문서 `.agents/MULTI_AGENT_RULES.md` "Timeout Configuration" 및 `docs/contracts/issue-6/*` - **내용**: Issue #6 은 무응답 잡을 `IDLE_TIMEOUT + 5s` 에 닫는다고 약속했으나, 디스크 heartbeat 유예 도입 후 실제로는 마지막 와이어 이벤트 기준 약 `2 × IDLE_TIMEOUT`(구독자 idle 대기 + 유예 창)이며 heartbeat 간격도 최대 약 `2 × IDLE_TIMEOUT` 까지 허용됨. VERSIONS.md v4.4.2 에는 적혀 있으나 규칙·계약 문서는 아직 이전 값. 문서를 갱신하거나 창 크기를 별도 knob 으로 분리. ### 7. `events.log` 의 의미 문서화 - **위치**: `lib_py/delegation/registry.append_event` docstring, `MESSAGING.md` - **내용**: `ebe58f6` 이후 `events.log` 는 브로커 발행 **전에** 기록되므로 "수락된(ACK 된) 이벤트"가 아니라 "시도된 이벤트"의 기록(CAS 에서 거부된 발행분 포함). 이 파일을 상태 판단에 쓰는 코드가 생기지 않도록 한 줄 명시. ### 8. codex 무응답 사례 조사 (`e657c660`) - **관측**: 2026-09-12 17:30:18Z 등록 → 주입 성공 처리 → codex 이벤트 0건 → 17:34:21Z `deadline_timeout`. `~/.codex/sessions` 의 codex 대화 기록에 job id 가 전혀 등장하지 않음. 반복 3 에서는 같은 세션이 정상 리뷰(`0ad7cb06`, PASS). - **가설**: (a) 항목 2 의 오탐(모달 등이 입력을 삼킨 뒤 화면만 변화), (b) herdr 가 codex 의 `working` 을 보고하지 않아 `wait_for_agent_idle` 이 턴 도중에도 idle 로 판단, 이전 턴이 끝나기 전에 프롬프트가 주입됨. 재현 시 pane 캡처·herdr 상태를 함께 남기는 진단 로그 추가 검토. --- ## 참고 - 리뷰어 공통 확인 사항: 위 항목들은 모두 비차단으로 분류됐고, 브랜치는 만장일치 PASS·전체 스위트 819/819 통과 상태. - 우선순위 제안: 2·8(오탐/무응답) > 3·4(판정 정밀도) > 6·7(문서) > 1·5(보강/정리). ## 환경 정보 (Environment) - OS: macOS (Darwin 25.6.0), herdr 0.9.0 - MAM Version: v4.4.2 (`fix/issue-9-14` @ `9e1f0b6`, main `4d444ce` 위) - Agent: codex (`planner-reviewer-codex-01`, gpt-6-astra high) 외 claude/agy/grok
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tmpl/multi-agent-mux#16