완료 알림은 폰에 갔는데, 장부는 12시간 비어 있었다
초록불과 완료 알림을 믿기 전에, 그 계기가 살아 있는지부터 확인해야 한다는 걸 하루에 두 번 배웠다.
새벽에 발견한 것 — 스캐너가 아무것도 안 세고 있었다
격리 테스트 러너가 샌드박스를 만들 때 파일을 저장소에 등록하지 않고 있었다. 그래서 등록된 파일 기준으로 대상을 찾는 픽스처들이 파일을 0개 발견하고 조용히 통과했다. 빨간불이 안 뜬 게 아니라, 셀 것이 없어서 초록이었던 것이다.
같은 새벽에 macOS 기본 셸(bash 3.2)에서만 터지는 결함도 연달아 나왔다. 빈 배열을 순회하는 구문이 리눅스에서는 멀쩡한데 맥 노드에서만 죽는 종류다. 리눅스에서만 돌려봤으면 영원히 못 봤을 것들이다.
배운 것 — 0건과 초록은 성공의 증거가 아니다. 그전에 계기가 살아 있다는 것부터 증명해야 한다.
카톡봇에게 눈을 달았다
카톡봇이 방에 올라온 그림을 직접 회수해 읽는 통로를 열었다. 서명 키를 저장소 밖 영속 경로로 옮기고, 없으면 아예 진행을 막는 처리도 함께 넣었다.
밤에는 오픈채팅방 대응으로 2중 게이트를 붙였다. 오픈챗은 아무나 들어오는 공간이라, 호출 접두사만으로 반응하게 두면 봇이 모르는 사람에게 끌려다닌다. 방 화이트리스트와 호출 트리거를 함께 요구하도록 했다.
앱 아이콘과 첫 화면이 따로 놀고 있었다
한줄일기 앱 아이콘은 크림색 바탕에 코랄 말풍선인데, 실행하면 뜨는 첫 화면은 파란 그라데이션이었다. 아이콘만 바꾸고 스플래시는 안 바꿨던 것이다.
배경을 아이콘에서 실측한 크림색으로 맞추고, 아이콘을 가운데 배치하고, 안드로이드·iOS 네이티브 리소스까지 같은 톤으로 정리했다. 부제도 같이 손봤는데 이유가 따로 있다 — 기존 문구가 AI 답글 기능을 전제하고 있었고, 그 기능은 걷어내는 중이라 곧 거짓이 될 문장이었다.
”일을 끝내고 티켓을 안 내리는 거냐”
저녁에 지적이 들어왔다. 확인해보니 아침 8시 23분에 완주한 작업이 폰 알림까지 보내고도, 할 일 목록에는 12시간 동안 진행 중으로 방치돼 있었다.
원인을 파보니 게으름이 아니었다. 그 작업 스크립트는 자기를 띄운 창을 스스로 죽이고 끝나는 방식이었다. 즉 다 끝난 시점에는 장부에 적을 주체가 이미 소멸해 있었다. 로그를 보면 단계가 이렇게 흘렀다.
정지 → 설치 → 검증 → 재기동 → ✅ 폰 알림 → 종료
알림은 있는데 기록 단계가 아예 없다. “다음엔 잊지 말자”로는 막을 수 없는 종류다.
그래서 세션 종료형 스크립트용 정본 헬퍼를 만들었다. 계약은 순서다 — 작업 → 검증 → 장부 먼저 → 알림 → 종료. 그리고 시작할 때 “죽을 때 실행되는 약속”을 걸어두어, 중간에 어떻게 끊기든 죽는 길에 한 줄 남기고 죽게 했다.
반대로 장부 기록이 실패했다고 알림을 막지는 않았다. 그러면 장부도 비고 알림도 조용해져서 원래 사고보다 나빠진다. 대신 메시지 앞에 경고를 붙여 보낸다.
배운 것 — 재발 방지는 문장을 하나 더 적는 게 아니라, 잊어도 결과가 남게 만드는 것이다.
살아 있는데 말을 안 하는 상태
밤에 비슷한 계열을 하나 더 잡았다. 브릿지 프로세스가 멀쩡히 살아 있고 오류도 없는데, 최종 답변만 21분간 안 나간 구간이 있었다.
기존 감시기가 이걸 못 잡은 이유가 흥미롭다. 그 21분 동안 로그의 전송 라인은 881건이나 찍혔다. 진행 상황 미러, 추론 미러, 주변 알림은 정상으로 흘렀고 최종 답변 한 종류만 멈춘 것이다. 그래서 모든 지표가 초록이었다.
감지 축을 그 한 종류에 맞춰 새로 얹었다. 다만 오탐 방지를 세게 걸었다 — “마지막 답변이 오래됐다”만으로는 절대 발동하지 않고, 보낼 것이 실제로 밀려 있을 때만 고장으로 본다. 이게 없으면 대화 없는 새벽마다 감시기가 브릿지를 걷어차게 된다.
배운 것
죽은 채로 초록이던 픽스처들이 다시 살아났고, 맥 전용 셸 결함 3건이 닫혔다. 카톡봇이 그림을 읽고, 오픈챗에서는 2중 게이트로만 반응한다. 한줄일기 첫 화면이 아이콘과 같은 톤이 됐다. 완료 시점에 장부가 비는 구조가 코드로 봉합됐다. 브릿지가 살아 있는 채로 침묵하는 상태를 감시기가 보게 됐다.
들어간 돈은 0원. 대신 이날 배운 값은 꽤 비싼 편이다 — 하루에 세 번, 서로 다른 자리에서 “겉보기 정상”이 실제로는 고장이었다.
— 강대종 / @ssamssae