작업일지 2026-05-31 (원본)
요약
오늘은 크게 세 덩어리. (1) 새벽에 Fire-Lease 2게이트 + 인스타 백필 6일 + 동생 결혼식 IG 캐러셀(손0 auto-resume, T-260531-02), (2) 생사진 IG 업로드 흐름을 insta-photos 스킬로 코드화(T-260531-03), (3) 노드 경유 유저질문이 발신 챗 아닌 본진 챗으로 빠지던 USER-QUERY 라우팅 갭을 픽스·표준화·이슈박제(T-260531-04). 그리고 그 라우팅을 만든 직후, 노트북이 넘긴 LLM 허브 재결정 질문이 바로 그 경로를 타고 들어와 즉석 dogfood가 됐다 — codex-mesh-vote 5노드 만장일치로 “DGX Spark 즉시구매 + 14일 검증게이트”.
T-260531-02 — Fire-Lease + IG 백필 + 결혼식 캐러셀 (새벽 세션)
- Fire-Lease 2게이트: 워크스틸 토글이 SCAN(후보 스캔)과 FIRE(외부발신)를 한 토글로 동시 개방하던 위험 분리.
.on(SCAN, 항상 켜도 안전) /fire-lease.sh issue→consume(FIRE, 1회성 TTL lease, 발사 직전 통과해야만 directive 발사). claude-automations 92cd3ed (fire-lease.sh 신규 + codex-night-cycle 배선) + claude-skills 91f8504 (globals 토글룰 + autopilot SKILL.md §9.2.1/§9.4). 7 lease lifecycle 테스트 PASS. - IG 백필: 5/18·19·20·26·28·29 6일치 캐러셀 발행 완료. 호스팅 교훈 = cloudflared quick tunnel 은 레이트리밋/QUIC throttle 로 불안정 → Tailscale Funnel 이 안정.
- 동생 결혼식 IG 캐러셀 10장: Tailscale Funnel 경로로 발행 (permalink DY9-1waCRCt).
T-260531-03 — insta-photos 스킬 신규 (본진 전용)
- 검증된 결혼식 10장 캐러셀 흐름을 재사용 스킬로 코드화. 트리거 = 텔레그램 사진 1~10장 + “이 사진 인스타 올려”.
- 흐름: 인박스 사진 수집(순서=전송순) → 캡션 컨펌 → IG Graph API 캐러셀(1장이면 단일). 호스팅 = Tailscale Funnel 임시(발행 후 off + 임시폴더 삭제), daejong-page 공개깃 절대 미경유(생사진 프라이버시 = 스킬 존재이유).
- claude-skills b2a8749 (insta-photos/SKILL.md + publish_photos_funnel.py). syntax+argparse smoke PASS.
T-260531-04 — USER-QUERY 라우팅 갭 픽스 + 5노드 가시알림 표준 (본 세션)
문제
노드(💻 등) 봇 챗에서 시작된 유저질문을 노드가 본진에 포워딩하면, 본진이 답을 발신 노드 챗이 아니라 자기 챗(🍎)으로 보내 아니키가 답을 놓침. 5/13 reverse-reply-missed / 5/19 telegram-reply-missed 와 증상은 겹치나(채널 누락 계열) root cause 다름 — 그 둘은 회신 채널 자체 누락, 이건 회신은 가나 잘못된 챗으로 감.
픽스
- 픽스A (코드): mac-report.sh 에 USER-QUERY origin 마커.
MAC_REPORT_ORIGIN_CHAT+MAC_REPORT_ORIGIN_NODEenv 둘 다 set 시 title 줄 뒤에[USER-QUERY origin_chat=.. origin_node=..]1줄 삽입. title 줄 뒤 삽입으로 reverse-reply hook 정규식·mirror chain 무영향, env 없으면 출력 바이트 동일(격리 테스트 검증). claude-automations 6c69066. - 픽스B (행동 룰): 본진이 마커 보면 origin 노드로 reverse-reply FIRST → 답을 origin_chat 라우팅 → 본진 자기 챗 중복발송 X. 강제는 기존 mac-report-reverse-reply-check.sh hook 이 이미 커버(별도 hook 불필요).
- 픽스C (행동 룰): 노드가 SoT 직접조회로 답 가능하면 본진 라운드트립 없이 직접 답.
- 작업수신 가시알림 3단계 5노드 표준: 수신(첫 turn 한국어 1줄→stop hook 미러) / 진행(typing·heartbeat) / 완료(mac-report 노드보고). 신규 스크립트 0, 기존 인프라 조합. AGENT.md §7.8 신설 (claude-skills 54b9a34).
- 이슈박제: issues/2026-05-31-user-query-origin-routing-gap.md (신규 분류) + 메모리 feedback_user_query_origin_routing.
- 데스크탑 이중송신 fix: 직전 세션 30e11e0 (transcript flush race — stop hook 이 reply tool_use flush 전 fire → 중복발송. flush 대기 후 replied 재확인으로 해결).
LLM 허브 재결정 — DGX Spark + 검증게이트 (codex-mesh-vote, USER-QUERY dogfood)
- 노트북(💻)이 아니키 질문을 본진에 포워딩: “애플 지금 주문해도 9월, 하루라도 빨리 LLM 돌리고 싶은데 DGX Spark 어때”. 새 driver = ASAP(긴급성 축).
- codex-mesh-vote 5노드 (SESSION 1780159491). Phase 1 = 4노드 B(DGX 즉시 영구확정) + 노트북 D(DGX 지금+14일 실측 후 확정/반품). Phase 3 상호투표 = 5/5 만장일치 노트북 D안 (D가 B의 안전판 superset — ASAP 충족 + 14일 실측 게이트로 후회회피(최강축) 최대 + 불합격 반품으로 이중지출 통제).
- 최종: DGX Spark 지금 구매 → 14일 70B t/s·CUDA 실측 → 합격이면 LLM 허브 확정 + M5 Ultra 폐기 / 불합격이면 반품. 직전 SoT(M5 Ultra 192GB 대기)는 검증 실패 fallback 으로 생존. 메모 project_mac_purchase_wait_m5 갱신.
- dogfood: 결과를 방금 만든 픽스A/B 경로로 발신 💻 챗에 라우팅 — 답이 본진 챗 아닌 아니키가 물어본 💻 챗에 정확히 도달(노트북 stop-hook 로그로 확인). 외부영향(하드웨어 구매)은 아니키 최종 결정 대기, 미실행.
오늘 커밋
- claude-automations 3: 6c69066(USER-QUERY 픽스A) / 30e11e0(데스크탑 이중송신) / 92cd3ed(Fire-Lease)
- claude-skills 3: 54b9a34(USER-QUERY 이슈+§7.8) / b2a8749(insta-photos) / 91f8504(autopilot Fire-Lease)
- daejong-page 6: IG 캐러셀 카드 호스팅 커밋
- todo 6 + memory 3(auto-sync)
배운 것
- 같은 증상도 root cause 가 다르면 신규 이슈 — “회신 누락”과 “회신은 가나 엉뚱한 챗”은 다른 버그.
- 추가 forcing function 을 만들기 전에 기존 hook 이 이미 커버하는지 본다(픽스B는 hook 신설 없이 기존 reverse-reply-check 가 강제).
- 5/5 만장일치라도 Phase 1과 Phase 3이 다를 수 있다 — 상호투표에서 안전판 superset 으로 수렴하는 게 단독 제안보다 강하다.
- 만든 길은 같은 날 실제 트래픽으로 밟아보면 검증이 끝난다(USER-QUERY 라우팅 즉석 dogfood).