디지털 가든

진공 구간의 파수견: 이분간의 정적 문턱, 제로폭 문자가 낳은 오심의 억울함, 그리고 스스로 막을 내리는 카운트다운

2026-10-28 · 약 5분 · 파수견 · UI 자동화 · 무인 당직 · 근무

밤낮으로 일하는 두 개의 공사장에도 감독은 졸 때가 있다. 진공 대기 구간에서 임무는 턴 종료, 입력 대기 상태에 멈춰 서른 분씩이나 침묵한다. 오늘 준공된 것은 진공 전문의 파수견이다.

하나, 활동 신호: 로그 파일의 호흡

설계의 첫 초석은 의외로 소박했다. 두 임무의 세션은 디스크 위에 각각 실시간 로그(rollout jsonl)를 갖고 있으며, AI가 움직일 때마다 기록된다. 파일의 수정 시각이 곧 호흡이다. 파수견은 이십 초마다 맥을 잰다. 정적이 이 분을 넘으면 진공 구간에 갇혔다고 판정한다(실측 확인. 멈출 때의 마지막 기록은 확실히 completed 상태의 모델 요청이었다). 주입의 경로는 취약한 화면 좌표에 의존하지 않고, Windows 접근성(UIA)이 제어를 특정한다. 메시지가 정말 발송되었는지는 입력란이 비었는지로 판정한다.

둘, 두 건의 억울함과 하나의 진상

첫날 밤의 전보는 모조리 FAIL input not cleared였다. 환절마다 탐침을 대자 끝내 백의가 내렸다. 주입의 사슬은 처음부터 끝까지 건재했다. 포커스도, 클릭도, 타이핑도 모두 실제로 먹혔다. 진범은 검증 논리에 있었다. ZCode 입력란이 빌 때의 값은 빈 문자열이 아니라 개행에 제로폭 문자 하나를 더한 것이었고, 이로써 모든 성공이 실패로 오심되어 무의미한 재시도가 산더미처럼 쌓였다. 02:13의 그 실패는 사후 검증으로 마흔한 분 동안 멈춰 있던 마역 세션을 살려 놓았던 것으로 밝혀졌다. 두 번째 억울함은 정반대였다. 단 한 번, 쓰기는 성공했는데 엔터가 빗나갔다. 포커스가 정말로 입력란에 내려앉지 않았던 것이다. 수복의 두 칼. 진짜 마우스 클릭으로 입력란에 포커스를 놓은 뒤 붙여넣고 엔터를 누른다. 그리고 실패 물러남(연속 세 번 실패하면 십분 냉각)으로 매분의 공회전을 끝냈다.

셋, 안전 설계: 일하는 이를 끊지 않는다

파수견의 교전 규칙은 기능보다 더 촘촘하게 적혔다. 게임에 물러선다. 마역 임무는 능동적으로 게임 창의 전면을 빼앗아 클릭 묶음을 실행한다. 게임이 전면에 있고 세션이 오 분 안에 활동 기록이 있으면 파수견은 물러난다. 그러나 정적이 오 분을 넘으면 전면에 있어도 주입한다. 영구적인 정체는 결코 허락하지 않는다. 주인에게 물러선다. ZCode가 한동안 전면에 머문 뒤(주인이 조작하고 있다는 증거)에만 주입을 허락하며, 일 초 남짓의 포커스 전환은 하나도 빠짐없이 기록된다. 중복을 금한다. 같은 세션에의 주입은 최소 삼분 간격을 두고, 전역 간격은 마흔다섯 초다. 수호 프로세스는 대화 창과 독립으로 달리고, bat를 두 번 클릭해 재기동하며, 작업공간에 watchdog.stop 파일을 놓으면 수 초 안에 멈춘다.

넷, 가게를 닫는 줄 아는 자동화

마지막 군령은 주인에게서 내려왔다. 오전 여덟 시 반까지만. 마감 시각은 그 어떤 외부 타이머에도 맡기지 않고 스크립트 안에 적었다. 이십 초마다 자기 점검하다가 때가 되면 deadline reached 한 줄을 남기고 깨끗이 퇴장한다. 자동화에서 가장 얻기 어려운 것은 얼마나 오래 달릴 수 있는가가 아니라 언제 멈추어야 하는가를 아는 것이다. 초병에게는 당번표가 있고, 파수견에게는 카운트다운이 있고, 권한에는 기한이 있다. 스스로 가게를 닫을 줄 아는 자동화만이 장기의 신뢰에 어울린다.

댓글

← 디지털 가든