2026-06-06 작업일지 v1.0.0 (원본)
함대 자동화 인프라 정비의 날. “본진=거버넌스, 노드=실행” 역할분담이 실전에서 처음 제대로 돌아갔다. 본진은 진단·결정·발주만, 맥미니/라이덴이 구현. 라우팅 갭 의심에서 출발한 추적이 cosmetic 라벨 버그로 밝혀지고 원천까지 막혔다.
타임라인 요약 (KST)
- 낮~저녁: 5노드 대량 병렬 작업 (앱·첫이름 배포·daejong-page·함대 워커 인프라)
- 19:25~20:52: 자동 codex 사이클 이벤트 체이닝 정상 가동 (—node fan-out)
- 20:00~20:42: mac-report 라벨 split 버그 추적 → 라벨 단일소스 파생 fix (aca46b3)
- 21:27~22:15: 본진 codex 자동 Enter 멈춤 추적 → paste-buffer -p + Enter 5회 fix
- 22:30~23:20: 이벤트 체이닝 끊김 진단(fire-lease 고갈) + PR 큐 4건 검증 + 라이덴 self-merge 판정
A. 함대 라우팅/라벨 버그 추적 (본진 거버넌스 주도)
발단: 아니키 “자동 codex가 왜 본진(맥북)에 보고하냐”. 본진이 진단해 맥미니에 발주하는 흐름으로 처리.
- 라우팅 갭 의심 → cosmetic 라벨 버그 판명: delivery(ssh 전송)는 줄곧 맥미니로 정상. 헤더 “→수신처” 라벨만 기본값 🍎로 fallback돼 “본진 보고”로 오인됐던 것. (da5621f 라우팅 본진→오케스트레이터 정비의 후속)
- 라이덴 라벨 잔존: worker-toggle이 orchestrator.env(라벨 SoT)를 오케스트레이터 머신에만 쓰고 워커노드(wsl/desktop/notebook)엔 안 써서, 토글 시점 라이덴에 env 부재 → 🍎 fallback. 맥미니가 노드에 수동 배포로 해소.
- 회귀방지 (b) 결정·구현: 라벨을 별도 env가 아닌 delivery 타겟(MAC_HOST=MAC_REPORT_HOST)에서 host→label 맵으로 파생. delivery와 라벨이 단일소스라 split 구조적 불가. commit aca46b3. 5케이스 eval PASS (옛 split 재현 케이스도 🏭 일치).
- 이벤트 체이닝 정규식 fix: 꼬리훅이 짧은 컬럼명(desktop/notebook) 거부하던 버그 (b5dfffa), —node 모드 node_busy 레이스 (e97aea8).
B. 함대 워커 인프라
- macmini-codex self-worker 4번째 워커화 (82e2b39): 맥미니가 ssh-to-self 대신 로컬 tmux 직접 주입으로 자기 codex에 task 주입. 본진 bonjin-codex-worker 메커니즘 차용 (publickey 거부 우회).
- 본진 codex 자동 Enter fix: paste 직후 Enter 1발이 codex TUI bracketed-paste race로 무효화 → task가 입력창에 멈춤. paste-buffer -p + sleep 2 + Enter 5회(각 0.3s) 패턴으로 통일 (codex directive v3, 744110a/1ed05b1, 본진 bonjin-codex-worker.sh 동일 적용). 라이브 검증 PASS (옛 패턴은 멈춤, 신 패턴은 Working 전환).
- 양보 가드 10→2분 단축 (1cbd5ae, 65127aa): 아니키 활동 시 codex 양보 시간을 10분→2분. launchd 폴링도 30분→2분 (7a69e18).
- task-lease/reap (7d60a77, PR #106 eba4fc8): auto-engine task가 [
]로 lease되고 죽거나 TTL 만료 시 [ ]로 reap. 노드死 시 [] 영구잔류 방지. (라이덴 codex 작업, self-merge 권한 위반 별도 판정) - SessionStart 체인 단일 SoT (d590878/6b1565f): config/session-start-chain.json + sync.py로 5노드 drift 제거.
C. 앱
- 더치페이: 카카오 친화 정산 공유 (#14, a8f9dee)
- 약먹자: cold-start 서비스 first-frame 이후 지연 (#15, 608f38b), ASO/ASC 메타 정리 (b242f5e/8d9651a), AdMob 정책 결정
- 한줄일기: 1.2 다이어리 경험 강화 (#25, 0212572)
- 메모요: competitor triage (e02aee4), 1.1 roadmap (#62)
- mini_expense: iOS App Store 빌드 준비 (04d3abc)
- 8앱 통일: version footer 적용 (#24)
D. 첫이름 (cheotireum)
- prod 라이브 배포 완료 (68ff109): D1 escalations 테이블 + Worker + 웹. 전달증빙 로깅(delivered_at/first_viewed_at) prod 적용.
E. daejong-page
- insight 보안: markdown XSS sanitization 가드 (a3aab3f/8c01032), source_url href 스킴 allowlist (365b9bf)
- AI glossary: hero stats sync (de50456), 자동 regenerate 훅
- 뉴스레터 Ep27 후보 3안 (df4f059): 첫이름 출시기/staleness 게이트/행정 전선
- vibecoding 함대 오케스트레이션 섹션 (8d32abc): 자동/수동 2레인 + 역할반전
F. todo / 거버넌스
- 대량 task 마킹·수동큐 이관 (다수 커밋)
- PR 큐 4건 검증 (본진): #103 닫기(중복), #105 test만 살리고 닫기, #99 머지(주석), #82 닫기(SessionStart 체인 슈퍼시드 — 본진 완료본이 상위집합 확인)
- 라이덴 self-merge 권한 위반 판정: PR #106/#35를 라이덴이 23:11 KST self-merge. prefix 브랜치→PR→본진/맥미니 머지 룰 위반. 내용은 검증돼 롤백 X, 재발방지 주지.
이벤트 체이닝 끊김 진단 (미완 — 맥미니 fix 진행)
- 노드 codex 완료→즉시재분배가 20:52 이후 끊김. heartbeat(launchd)만 남음.
- 본진 진단: [event] 헤더가 fire-lease consume 게이트보다 코드상 나중 → consume SKIP 시 흔적 없이 종료. fire-lease 1회성 lease가 —node 연쇄 다발을 못 받쳐 고갈 의심.
- 본진 codex는 이벤트 체이닝 자체가 없어(launchd 30분 주기만) task 간 텀 발생. 노드 fix 후 같은 방식 차용 예정.
배운 것
- “어디로 보내냐”(delivery)와 “어디로 보낸다고 표시하냐”(라벨)가 다른 소스면 반드시 split난다. 단일소스 파생이 구조적 해법.
- 로그에 헤더가 안 찍혔다 ≠ 프로세스 미실행. 게이트가 헤더보다 먼저면 SKIP이 흔적 없이 종료한다.
- codex TUI는 bracketed-paste race가 있어 Enter 1발로는 제출 안 됨. -p + 다중 Enter 안전벨트 필요.
- 본진=거버넌스/노드=실행 분업: 본진이 진단·결정·발주, 노드가 구현·검증. grunt를 본진이 직접 안 하는 게 핵심.