2026-05-29 작업일지 (원본)
버전: v1.0.0
한 줄: codex가 tmux main을 직접 점유하던 비대칭을 5노드 전부 codex 전용 세션으로 분리(cx 대칭화), 그 과정에서 mirror dedup 함정·노드 보고 표준 빈틈을 잡아 글로벌 룰로 박은 날. 그 외 choso.db 22GB retention fix, 작전보드 v2, 메모요 1.0.7 GA QA + 1.0.8 spec, 세션 자동 /clear 무한루프 정리.
1. cx 코덱스 세션 대칭화 (T-260529-15) — 5노드 완료
문제: claude는 cc→claude 세션 구조인데 codex는 tmux main을 직접 점유하는 비대칭. main이 빈 진입점이어야 하는데 codex REPL이 main을 깔고 앉아 있었음.
- 라이덴(WSL)이 파일럿:
~/bin/cx래퍼(cc 미러, SESSION=codex, 바이너리 자동탐색) +codex-tmux-start.shSESSION main→codex +wsl-codex-directive.sh타겟 전환 + codex 세션 기동 + main 빈 bash. - 본진이 나머지 4노드 롤아웃 지휘. 첫 발사는 codex-directive 채널로 쐈으나 노드 main이 codex REPL이 아니라 빈 bash라 디렉티브가 bash syntax error로 흘러감(무해). 진단 결과 데스크탑/노트북/맥미니 전부 claude 세션으로 돌고 codex 미기동 상태였음.
- 채널을 claude-directive로 고쳐 데스크탑부터 순차: 각 노드가 cx 래퍼 + codex-tmux-start.sh 생성 + codex 세션 기동 + 자기검증(PROBE 도착). 본진이 각
<node>-codex-directive.sh타겟 main→codex 전환 + PROBE 도착 검증 PASS. - 노드별 codex 바이너리 경로 상이: 데스크탑 nvm v22.22.2, 노트북 .npm-global, 맥미니 homebrew, 본진 .npm-global, 라이덴 hook(단수 오타). 비대화형 ssh의 nvm PATH 누락 함정으로 “codex 없음” 오진 → 대화형 셸 재확인으로 정정.
- 본진은 데스크탑 검증본 cx + codex-tmux-start.sh를 scp로 설치(codex 자동탐색에 npm-global 포함).
- 결과: 라이덴·데스크탑·맥미니·노트북·본진 5노드 전부 claude/codex/main 대칭 구조. claude-automations 4개 directive 스크립트 default main→codex commit, claude-skills codex-loop-fleet SKILL.md tmux 세션 참조 4곳 갱신.
2. mirror 누락 (agent-msg-notify dedup) — 부수 발견 + fix
- cx 롤아웃 디렉티브가 노드엔 도착했는데 형님 폰 봇 챗 mirror가 누락. 원인:
agent-msg-notify.shdedup guard가 payload 첫 80자 해시를 60초 window로 잡는데, cx 롤아웃 본문이 노드마다 첫 80자가 같아 두 번째부터 silent skip. - fix: 이미 2026-05-27에 만들어진 opt-out
AGENT_MSG_NOTIFY_SKIP_DEDUP=1를 fan-out 발사에 켜서 우회. 이후 발사부터 mirror 정상.
3. 노드 작업완료 보고 표준 — globals 룰 신설
- 형님이 봇 챗에서 “데스크탑만 터미널 응답이 다르다” 지적. 진단: 데스크탑도 한국어 작업 요약을 터미널에 남겼으나, mac-report 보내기 직전 “Now reporting back to 본진…” 영어 메타 멘트로 turn을 끊었고, stop hook이 “그 turn의 마지막 텍스트”를 mirror하는 탓에 짧은 영어만 떴음. 노트북·맥미니는 한국어 요약을 같은 turn 마지막에 출력해 정상.
- globals/CLAUDE.md에 룰 신설: “노드 작업완료 보고 = 한국어 작업요약을 같은 turn 마지막 응답으로, 영어 메타 멘트로 turn 끊기 금지”. probe(이모지 1자) 룰과 구분. 데스크탑 세션 즉시 리마인드 + 5노드 sync.
4. choso-codex-ping repoint (cx 후속)
- cx 대칭화로 codex가 codex 세션으로 옮겼는데 각 노드 choso-codex-ping이 여전히 main(빈 bash)을 타겟 → 초소 대시보드에 codex 활동 stale.
- 3노드 repoint: 데스크탑(systemd env, PR #57 머지), 노트북(systemd env, SoT는 본진이 박음), 맥미니(launchd plist env, commit 31c74b5). 대시보드 “tmux codex · prompt ok” 확인.
5. codex_hooks→hooks 부팅 경고 정리 (5노드)
- codex 부팅 시
[features].codex_hooks deprecated경고. 본진·맥미니는 codex_hooks=true 잔재 삭제(실제 경고 노드), 데스크탑·노트북은 [features] 없어 hooks=true 추가(경고 없던 노드 정합), 라이덴은 hook(단수 오타)→hooks 교정(실은 hooks 비활성이던 걸 살림). 전부 클린 부팅 확인.
6. choso.db 22GB → retention (다른 세션/맥미니)
- 02:00 헬스체크에서 choso.db 22GB(2300만 ping 누적) 발견. save_snapshot에 retention prune(최근 500 스냅샷 유지) 추가로 재발 방지. 현재 48M로 회수 확인. retention 정책 v2 spec + auto_vacuum deep-dive.
7. choso 작전보드 v2 (맥미니/codex-mesh-vote)
- TASK 박스 제거(codex-mesh-vote 5/5 b), 작전보드 v2: 탭 토글(액션/결정/프로젝트 단일 표시) + kind 카드 펼침(전체 details 토글).
8. 메모요 1.0.7 GA QA + 1.0.8 spec (노드 오토파일럿)
- 1.0.7 GA manual QA 시나리오 + 회귀 테스트 다수(Drive backup rotate, reorder 콜백, empty state). 1.0.8 후보 spec 3종(휴지통 30일 / 검색 / Drive DI 훅) deep-dive + 묶음 비교 spec(b/c/d/e). cross-SDK lint cascade 끊기. 형님 픽 (c)→(e) 진행했으나 1.0.7 GA 출시 전이라 코딩 진입은 게이트.
- 5노드 Flutter SDK 통일 정책 brainstorm v2 (skew cascade 재발 방지).
9. 인프라 정리 + 이슈 카탈로그
- next-cycle.md 폐기 잔재 정리: cycle-trigger.sh + next-cycle-rescue.{service,timer} → _disabled (본진 세션 30분마다 자동 /clear 무한루프 root cause 후속, 가역).
- nightly-update: 세션 무관 staging 잔재 청소 + 바이너리 손상 자동 복구·알림 (ENOTEMPTY 루프 fix).
- choso-log-rotate.sh (uvicorn log 일별 회전), choso-node-broadcast PATH env fix.
- WSL 표시명 → 라이덴 (기능 식별자 wsl/봇/hostname은 유지).
- 이슈 박음: zshrc claude tmux 자동생성 race, autopilot ScheduleWakeup leak, stale main prediction, ENOTEMPTY staging 루프, alive ping 누락 + 위임 의도 오해(본진 실수 2건).
배운 것
- 비대화형 ssh의 nvm PATH 함정:
command -v codex가 비어도 바이너리는 있음. 대화형 셸(bash -ic)로 재확인 전엔 “없음” 단정 금지. (이미 globals에 있던 룰이 또 적중) - stop hook은 turn의 마지막 텍스트만 mirror: 작업 보고를 영어 메타 멘트로 끊으면 한국어 요약이 다음 turn으로 밀려 mirror 누락. 보고는 한 turn에 한국어 요약으로 닫아야.
- dedup의 양날: 같은 메시지 중복 발사를 막는 dedup이 의도된 fan-out(노드마다 거의 같은 본문)도 silent skip. opt-out envvar를 fan-out에 켜야.
- 롤아웃 전제 검증: “codex가 main 점유” 전제가 깨진 상태(노드는 claude로 돌고 main 빈 bash)에서 codex-directive를 쏘면 bash로 흘러감. 발사 전 채널/세션 상태 확인.