"앱은 듣는 동안엔 잊을 수 없어야 하고, 멈추는 순간 스스로 잊어야 해."
한 약속의 두 반쪽
신뢰 계약엔 상관없어 보이는데 사실 같은 생각인 두 반쪽이 있어. 들을 땐 보이게. 마이크가 살아 있는 동안엔 놓칠 수 없는 표시가 떠. 파형이 움직이는 알약 모양 오버레이. 메뉴바 색이 살짝 바뀌는 정도가 아니라 눈에 확 걸리는 걸로. 끝나면 잊게. 받아쓰기가 끝나면 오디오는 기본으로 버려져. 둘이 같이 이렇게 말해. 언제 널 듣는지 늘 알 수 있고, 들은 건 안 쥐고 있어.
파형이 중요한 이유
라이브 파형은 장식이 아니야. 가만히 떠 있는 '녹음 중' 라벨은 거짓말을 할 수 있어. 아무것도 녹음 안 하는데 떠 있을 수도 있고, 더 나쁘게는 뭔가 녹음 중인데 안 떠 있을 수도 있고. 네 목소리에 맞춰 움직이는 파형은 증거야. 실제 캡처 탭에서 나오니까 오디오가 진짜로 흐를 때만 움직일 수 있거든. 표시기가 자기가 표시하는 것에 붙어 있는 거지. 주장을 시연으로 바꿔 놓는 작은 설계 선택이야.
잊기와 잃기 사이의 긴장
'전부 버리기' 는 진짜 필요랑 부딪혀. STT 나 정리가 실패했는데 오디오를 버리면 유저 단어가 영영 사라지잖아. Firekeeper 는 한쪽을 고르는 대신 이걸 의도적으로 풀어.
성공한 받아쓰기 -> 오디오 버림 (기본)
STT 실패 -> 오디오를 recovery-audio/ 로 옮김, 10개로 정리
정리 실패 -> 원시 전사가 이미 상태에 있음; 단어 절대 안 잃음
디스크 히스토리 -> 옵트인만
# 기본은 잊기. 실패 시에만, 짧게, 제한적으로 보존.
원시 전사가 정리가 돌기 전에 상태로 들어가. 그래서 정리가 실패해도 네 문장을 먹을 수가 없어. 복구 오디오는 실패한 경우에만 생기고, 개수에 상한이 있고, 돌아가면서 지워져. 보존은 이유가 붙은 예외지, 변명이 붙은 기본값이 아니야.
표시기를 메커니즘에 붙여. 별도 플래그로 켜지는 프라이버시 표시기는 누락으로 거짓말할 수 있어. 누가 그 플래그 세우는 걸 잊으면 그만이니까. 메커니즘 자체에서 나오는 표시기는, 그러니까 캡처 탭이 먹여 주는 파형 같은 건 구조적으로 솔직해. 사실이 아니면 뜰 수가 없고, 사실인 동안엔 숨을 수가 없거든. '언제 X 가 일어나는지 알게 될 거야' 라고 약속하는 자리마다, 그 신호를 따로 보내는 알림이 아니라 X 의 부산물로 만들어.
허용하는 보존마다 상한을 걸어. 예외를 인정하는 순간, 그러니까 'STT 실패하면 오디오 유지' 를 받아들이는 순간, 바로 천장이랑 회전 규칙을 붙여. 상한 없는 예외는 조용히 아카이브가 돼. 실패한 녹음 열 개는 안전망이지만, 일 년 치가 쌓이면 그건 안 만들겠다고 약속한 바로 그 창고야.