2026.07.07 작업일지 v1.0.0
10:01, 공개 브릿지의 외부 사용자가 “윈도우에서 /ping 이 대답을 안 한다”고 알려왔다. 15:46, “코덱스는 일단 드롭하기로 했어” — 함대 엔진 전략이 반나절 만에 실행계획서가 됐다. 22:47, 카나리 노드가 같은 메시지 2회 배달을 잡아내고 스스로 꺼졌다.
7월 7일은 자정 직전부터 다음 자정 직전까지 끊긴 구간이 거의 없는 날이었다. 신규 태스크 74건이 등재됐고, 자동화 저장소 하나에서만 커밋 74개, PR 36개가 머지 게이트를 통과했다. 그날의 축은 셋이다. 바깥 사용자가 열어준 릴리스, 요금제 계산이 뒤집은 엔진 전략, 그리고 새로 만든 안전장치가 실전에서 처음으로 사고를 잡아낸 순간.
1. 외부 제보 하나가 릴리스가 되기까지
오전에 공개 codex-telegram-bridge 를 쓰는 외부 사용자가 윈도우에서 /ping 이 무응답이라고 제보했다. 파보니 브릿지 코드의 버그가 아니라 윈도우 자동 기동 경로가 아예 없는 게 원인이었다. Scheduled Task 기반 autostart 를 붙이는 공개 PR#2, 그리고 /TR 인자의 261자 제한에 걸려 XML 등록 방식으로 바꾸는 PR#3 이 연속으로 머지됐고, 14:32 에 v0.5.5 가 GitHub 릴리스와 PyPI 에 정식으로 나갔다. 릴리스 전 공개 클론에서 테스트 127개를 다 돌리고, 준비는 워커 노드가, 최종 발행 게이트는 본진이 잡는 분업이 이번에도 유지됐다.
내 도구를 남이 쓰기 시작하면, 버그 리포트는 내가 못 보던 환경에서 온다. 이날의 제보는 “내 다섯 노드에서 잘 도는 것”과 “남의 윈도우 한 대에서 도는 것” 사이의 거리를 정확히 보여줬다.
2. 요금제 계산이 엔진 전략을 뒤집다
15:46, 결정이 떨어졌다. 코덱스 구독은 일단 드롭하고, 7월 18일부터는 음성 챗 용도의 저가 플랜 하나만 남기는 방향. 그동안 다섯 노드의 기본 작업 엔진을 코덱스로 뒀던 구조가 통째로 흔들리는 결정이라, 저녁에 바로 “코덱스 드롭 대이동 러너북 v1”을 만들었다. 어떤 자동화가 코덱스 세션에 기대고 있는지, 전환 시 무엇이 끊기는지를 훑고, 결정이 필요한 5건은 20:06~20:13 사이에 즉결로 답을 받았다 — 코덱스 봇은 유지, 공개 브릿지도 유지.
같은 맥락에서 21:22 에 운영헌법도 손봤다. 그동안 모든 배차가 중앙(본진)을 거쳐야 했는데, 사용자가 해당 노드 채팅에서 직접 지시한 일감은 그 노드가 바로 배차할 수 있게 여는 v4.1 개정이 발의 11분 만에 머지됐다. 실제로 노트북에서 써보다 불편해서 나온 개정이라, 문서가 아니라 사용 경험이 헌법을 고친 셈이다.
3. 카나리가 처음으로 밥값을 했다
작업 중인 세션에 텔레그램 메시지를 끼워 넣는 busy-inject 기능을 이날 만들어 라이브에 올렸다. 문제는 밤에 왔다. 22:47, 카나리로 지정한 노트북 1대에서 같은 메시지가 두 번 배달되는 걸 확인했다. 하필 그 메시지가 정수기 물 급수 명령이라, 전 노드에 깔렸다면 이중 토출이 났을 상황. 카나리 노드는 즉시 꺼졌고, 기능은 전면 배포 전에 멈췄다.
후속 조사에서 더 재밌는 게 나왔다. 카나리를 다시 무장시키려는 시도가 감시견(watchdog)의 자동복구와 서로를 지우고 있었다 — 자가치유 인프라 둘이 싸우면 관측자는 “왜 자꾸 설정이 사라지지”만 보게 된다.
배운 것 — 자가치유 인프라끼리도 충돌한다. 새 기능의 라이브 증명은 기능 자체만이 아니라 기존 복구 레일과의 상호작용까지 설계 대상이다.
4. 유령 에어컨과 10분 먹통
17:48, 꺼둔 에어컨이 저절로 다시 도는 걸 발견했다. 원인은 스마트홈 클라우드가 아니라 우리 쪽 — 맥미니에 스케줄 유닛 3개가 중첩 등록돼 있었고, 꺼짐 명령이 토글 방식이라 이미 꺼진 기기를 다시 켜고 있었다. 유닛을 정리하고 “켜/꺼”를 목표 상태 기반(멱등)으로 바꾸는 수리가 머지됐다.
20:33 엔 텔레그램 브릿지가 10분간 먹통이 됐다. 토큰 한도로 생성 도중 죽은 턴이 “아직 작업 중” 표식을 물고 있어서 새 입력을 전부 막은 것. 세션 사망을 감지하면 표식을 즉시 해제하는 수리가 그날 밤 들어갔다.
배운 것 — 요금제 한도도 장애 시나리오다. 외부 자원이 고갈됐을 때 시스템이 어떤 상태를 물고 죽는지가 다음 날 아침의 가용성을 정한다.
5. 검증을 계약으로 만들다
오후엔 verify-contract 라는 체계를 하루에 네 단계로 쌓았다. 저장소마다 “이 변경은 무엇으로 검증돼야 한다”를 계약으로 선언하고, 워커의 완료 보고가 그 계약을 통과했는지 훅이 확인하는 구조다. 이 과정에서 리눅스 워커 3대에서 전부 초록이던 스크립트가 본진 macOS 의 bash 3.2 에서 크래시하는 걸 게이트가 잡았다. 반려하고, 고치고, macOS 에서 재검증한 뒤에야 머지.
배운 것 — 워커가 초록이라고 안전한 게 아니다. 플랫폼이 다른 게이트 한 곳이 마지막에 다시 돌려보는 비용은, 라이브에서 터지는 비용보다 항상 싸다.
6. 그래서 뭐가 남았나
공개 브릿지 v0.5.5 가 PyPI 에 살아 나갔고, 코덱스 드롭 러너북과 헌법 v4.1 이 함대 구조 전환의 레일을 깔았다. busy-inject 는 카나리 덕에 사고 없이 보류됐고, 에어컨 유령 사이클과 브릿지 먹통은 원인 코드까지 내려가 수리됐다. 공개 홈페이지도 이날 밤 워크로그·인사이트·뉴스레터·제품 페이지 등 거의 전 페이지의 톤을 정리하는 스프린트가 돌았고, AI 개발 비용 페이지가 새로 붙었다.
다음 이야기는 브릿지 봉투 태그와의 씨름 이야기.
— 강대종 / @ssamssae