"단어를 가질 즈음이면, 커서가 옮겨갔을 수 있어. 그러니 어디 있었는지 기억해."
멈춤 전에 잡아
삽입의 첫 일은 단어 하나 전사되기 전에 일어나. 단축키가 눌리는 순간 — 오버레이가 뜨기 전 — Firekeeper 가 타깃을 스냅샷해: 최전면 앱의 번들 id 와 프로세스 id, 포커스된 접근성 요소, 선택된 텍스트와 범위(있으면), 그리고 타깃 분류(브라우저, 에디터, 터미널, 채팅, 이메일, 비밀번호 필드, 미상). 오버레이는 일부러 비활성화(non-activating) 라, 그걸 보여줘도 타이핑하려던 필드에서 포커스를 안 훔쳐.
스냅샷이 중요한 이유
단축키-누름과 삽입 사이엔 초가 지나 — STT 돌고, 정리 돌고. 그 창에서 포커스가 흘러갈 수 있어: 다른 창을 보고, 앱이 다이얼로그를 띄우고, 알림이 포커스를 훔쳐. 삽입이 그냥 '지금 최전면인 뭐든' 에 타이핑하면, 받아쓰기가 완전 엉뚱한 앱에 떨어질 수 있어 — 최악은 올릴 생각 없던 채팅에 게시. 스냅샷이 고정 타깃이야: 포커스가 방황한 곳이 아니라 말하기 시작했을 때 있던 앱에 삽입.
단축키 누름 -> 스냅샷 { app, pid, element, selection, category }
... STT ... 정리 ... (여기서 포커스 흘러갈 수 있음!)
삽입 -> 최전면 앱이 아직 snapshot.app 인가?
예 -> 잡은 타깃에 삽입
아니오 -> 엉뚱한 앱에 타이핑 말고; 클립보드 + 알림
엉뚱-앱 가드
가드는 엄격한 결과가 있는 단순 비교야. 삽입 시점에, 최전면 앱이 아직 스냅샷과 맞는지 확인해. 바뀌었으면, Firekeeper 가 붙여넣기를 거부해 — 대신 텍스트를 클립보드에 복사하고 알려줘. '맞는 앱에 삽입하거나 삽입 안 함' 이 규칙; 엉뚱한 앱에 타이핑하는 건 아예 안 타이핑하는 것보다 나빠, 항상 수동으로 붙여넣을 수 있지만 게시한 메시지는 못 무르니까. 이 한 비교가 받아쓰기 앱이 가질 수 있는 제일 소름 끼치는 실패를 막아.