비어 있는 구간
검증실 스피커가 세 번째 같은 자리에서 꺼졌다. 잡음도, 클릭도, 바닥 노이즈도 없이 파형만 얇게 눌렸다. 도경은 재생 바를 14초 뒤로 당겼다. 서도진의 식별 태그가 붙은 코다 묶음이었다. 전날까지 미뤄 둔 파일, 열면 다른 일들이 흐려지는 파일.
다시 걸었다.
클릭열은 낮게 시작했다. 두 번 짧고, 한 번 길었다. 모계 7의 오래된 응답이 뒤를 받쳤고, 해류는 번역 후보를 줄지어 냈다. 수심, 이동, 경계, 돌아오지 않는 신호. 그다음에 서도진의 현장 음성 메모가 붙어야 했다. 원자료에는 인간 음성 대역의 흔적이 있었다.
화면에는 공백이 남았다.
입력 coda_bundle_7D_N7-linked human_tag: SDJ_partial
후보 모계 호출 경계 응답 인간 기록 접점
p 모계 호출 0.62 경계 응답 0.51 인간 기록 접점 0.18
상태 구간 비어 있음 원인 식별 불충분
⟨보류⟩ SDJ_partial 이후 4.8초
도경은 볼륨을 올리지 않았다. 볼륨으로 빈 곳은 차지 않는다. 대신 동일 묶음을 다른 창에 복제해 샘플링 간격을 바꿨다. 48킬로헤르츠, 96킬로헤르츠, 192킬로헤르츠. 각각의 변환본을 나란히 세우고, 같은 타임코드에 마커를 찍었다.
마커가 모두 같은 자리에 꽂혔다.
`00:03:17.241 - 00:03:22.036`
리샘플링은 같은 원본에서 갈라진 세 벌이었다. 위치가 흔들리지 않는다는 것만 말할 뿐, 손상 여부까지 배제하지는 못했다. 그건 다른 원천이 있어야 했다.
도경은 그 숫자를 손으로 적었다. 키보드로 치면 쉽게 지울 수 있었다. 종이에 쓰면 손목의 압력이 남았다. 서도진이 마지막 항해 전에 쓰던 필기체가 떠올라 펜 끝이 잠깐 옆으로 밀렸다. 아버지는 숫자 7의 가운데에 늘 가로획을 그었다. 도경은 자기 숫자에 그 획을 넣지 않았다.
다른 파일을 열었다. 같은 모계, 다른 날. 서도진 태그는 없고, 주변 장비 태그만 겹치는 묶음. 그 파일은 끝까지 풀렸다. 잡음은 많았지만 비지 않았다. 다시 아버지 관련 묶음으로 돌아왔다. 네 번째 재생. 다섯 번째 재생. 해류의 후보 문구는 조금씩 달라졌지만, 빈 구간의 시작과 끝은 흔들리지 않았다.
도경은 자동 보정 기록을 끄고 수동 판정표를 열었다. 우연이라면 간격이 흔들려야 했다. 손상이라면 노이즈가 남아야 했다. 모델 한계라면 후보 확률이 무너지는 방식이 매번 달라져야 했다. 지금 화면은 그런 쪽으로 움직이지 않았다.
파형 위에 납작한 선이 있었다. 소리의 부재라기보다, 소리를 놓을 칸만 남겨 둔 모양이었다.
도경은 마지막 재생을 멈추고 결과 행에 적었다.
`SDJ 관련 구간 반복 공백. 위치 일치. 재현됨.`
의문은 더 좁아졌다. 답은 아직 없었다.
*
원시 로그 폴더는 별도 권한을 요구했다. 도경은 요청 창을 닫고, 어제 김도현이 낮은 등급으로 내려 둔 자기 위반 항목을 떠올렸다. 덮인 기록은 사라진 기록이 아니었다. 이번 접근도 남을 것이다.
도경은 연구선 로컬 저장소에서 가공 전 음향 로그를 불러왔다. 해류가 토큰으로 쪼개기 전의 데이터였다. 번역 후보도, 의미 태그도, 아버지 이름도 붙지 않은 줄. 시간, 수심, 장비 번호, 압력 변화, 음향 에너지. 숫자만 있는 곳에서는 사람을 조금 덜 미워할 수 있었다.
먼저 결측값을 찾았다. 없었다. 손상 플래그도 없었다. 압축 해제 로그는 정상, 해시도 일치했다. 해당 구간의 수중음향 에너지는 아주 낮았지만 0은 아니었다. 도경은 주파수 대역을 펼쳤다. 저주파에는 물살이 있었고, 중간 대역에는 장비 진동이 얇게 깔렸다. 인간 음성 대역 쪽으로 작은 능선이 지나갔다.
비어 있지 않았다.
그런데 해류에 넣으면 비었다.
도경은 원시 코다만 잘라 새 입력으로 만들었다. 서도진 태그를 떼고, 파일명도 무작위 문자열로 바꿨다. 같은 시간대라는 흔적을 줄이기 위해 주변 30초를 앞뒤로 붙였다. 해류 샌드박스에 던지자, 모델은 이전보다 길게 계산했다.
입력 anon_segment_4C metadata removed
후보 이동로 이탈 저주파 경계 미분류 인간 대역
p 이동로 이탈 0.44 저주파 경계 0.39 미분류 인간 대역 0.21
상태 부분 해석 중심부 신뢰도 하락
⟨보류⟩ 4.8초
도경은 입술 안쪽을 이로 눌렀다. 태그를 떼도 길이는 같았다. 파일명을 바꿔도 같았다. 아버지 이름만이 원인은 아니었다. 그렇다고 이름이 무관하다고 말할 수도 없었다. 주변 코다와 결합될 때만 비는지, 특정 음성 흔적이 문제인지, 해류의 내부 분할이 같은 자리를 지우는지 아직 갈라지지 않았다.
원시 로그의 해당 4.8초를 확대했다. 파형은 작았고 얇았다. 하지만 완전한 구멍은 아니었다. 도경은 장비 보정값을 대조했다. 수중 마이크 3번은 그날 감도가 낮았고, 5번은 지연 보정이 두 차례 들어갔다. 그 정도면 번역 신뢰도가 떨어질 수 있었다. 그러나 같은 조건의 다른 구간은 번역됐다.
손상은 가능했다. 충분하지 않았다.
학습 한계도 가능했다. 해류는 고래 코다와 인간 음성이 겹치는 복합 구간에서 종종 보류를 냈다. 그러나 보류는 보통 낮은 확률 후보를 남겼다. 여기서는 후보가 중심을 비켜 갔다.
의도적 누락이라는 말은 아직 쓸 수 없었다. 도경은 그 단어 위로 커서를 가져갔다가 지웠다. 시스템이 무언가를 안 한다고 해서, 누가 시켰다는 뜻은 아니었다. 그렇게 쓰면 편해지고, 편해지는 순간 검증이 끝난다.
도경은 원시 로그 캡처를 저장했다. 파일명은 건조하게 붙였다.
`SDJ_gap_raw_comparison_01`
옆에 주석을 달았다.
`원자료 에너지 존재. 해류 출력 공백. 손상/한계/기타 원인 판별 불가.`
기타라는 단어가 마음에 들지 않았다. 너무 넓고 너무 숨기 좋았다. 그래도 지금은 그 넓은 칸을 남겨야 했다.
*
도경은 흰 보드 대신 로컬 메모장을 열었다. 보드에는 남들이 본다. 메모장은 감사 로그에 남아도 내용까지는 바로 공유되지 않는다. 규정 안쪽의 작은 틈이었다.
첫 줄에 `가능성`이라고 썼다. 그 아래 세 항목을 만들었다.
`1. 손상` `2. 학습 한계` `3. 의도`
세 번째 단어를 쓰고 바로 지우지 않았다. 단정이 아니라 항목이었다. 항목은 검증 대상일 뿐 결론이 아니다. 도경은 스스로에게 그렇게 설명했지만, 손가락은 그 줄 위에 오래 머물렀다.
손상 옆에는 장비 감도 저하와 지연 보정을 적었다. 반박에는 원자료 에너지 존재, 다른 구간 정상 번역, 반복 위치 일치를 적었다. 학습 한계 옆에는 고래 코다와 인간 음성 대역 중첩을 적었다. 반박에는 보류 길이의 완전 일치, 후보 중심 회피, 태그 제거 뒤에도 동일한 공백을 적었다.
의도 옆에는 오래 아무것도 쓰지 못했다.
도경은 의자를 뒤로 조금 밀었다. 검증실 벽면의 흡음 패널은 회색 사각형으로 나뉘어 있었다. 어릴 때 서도진은 도경에게 녹음기 버튼을 맡겼다. 해안 연구소 좁은 방에서, 빨간 불이 들어오면 말하지 말라고 손가락을 세웠다. 도경은 그 손가락을 오래 기억했다. 아버지가 사라진 뒤에는 그 손짓까지 미워했다. 왜 말하지 말라고 했는지, 왜 돌아와 설명하지 않았는지. 묻고 싶은 말이 많을수록 도경은 녹음 파일을 더 정확히 잘랐다. 틀리면 그 사람을 두 번 잃는 기분이 들었다.
메모장으로 돌아왔다.
의도 옆에 썼다.
`관측: 특정 접점의 반복 공백` `반박: 행위자/규칙/트리거 없음` `판정: 삭제 불가, 확정 불가`
그 문장은 치우침을 막아 주는 난간 같았다. 낮고 차가웠다. 도경은 세 항목의 맨 아래에 공통 결론을 붙였다.
`세 가능성 모두 유지. 추가 입력 설계 필요.`
해류 상태창이 뒤에서 깜박였다. 자동 분석이 끝난 모양이었다.
입력 SDJ_gap_raw_comparison_01 user_note: cause candidates
후보 신호 약화 모델 미분류 메타데이터 불일치
p 신호 약화 0.33 모델 미분류 0.32 메타데이터 불일치 0.29
상태 분기 유지 판정 불가
⟨거부⟩ 행위자 추정 누락 의도 추정
도경은 화면을 한 번 보고 웃지 않았다. 거부라는 단어는 정확했다. 해류는 자기가 모르는 것을 모른다고 냈다. 문제는 그 모름이 자꾸 같은 모양을 하고 있다는 점이었다.
도경은 보고서 초안을 열지 않았다. 하리시에게 보낼 문장으로 만들면 절차가 시작된다. 절차가 시작되면 원자료 접근은 묶이고, N7 관련 이력과 도경의 지난 위반도 같이 올라올 수 있다. 그래야 맞다. 그런데 맞는 순서가 늘 답에 가까운 것은 아니었다.
메모장 마지막 줄에 또 한 문장을 적었다.
`정면 접근은 동일 공백을 재생산한다.`
그 문장을 저장하자 다음 행동이 선명해졌다. 정면이 아니어야 했다.
*
저녁이 되자 검증실 유리창에는 내부 화면만 비쳤다. 도경은 공식 샌드박스를 닫고, 로컬 검증 도구를 열었다. 허가된 기능이었다. 허가된 범위 안에서 쓰면. 도경은 네트워크 연결을 끊고, 임시 작업 폴더를 만들었다. 자동 보고, 자동 동기화, 자동 태그 제안을 모두 껐다.
규정 문서에는 원자료를 파생 입력으로 재조합할 때 승인 번호를 붙이라고 되어 있었다. 승인 번호 칸은 비워 뒀다. 대신 파일을 세 조각으로 나눴다. 공백 앞, 공백 중심, 공백 뒤. 각 조각의 순서를 바꾸면 해류가 같은 자리를 비우는지 볼 수 있다. 의미는 망가진다. 그러나 빈자리의 규칙은 드러날 수 있다.
도경은 실행 버튼 위에서 손을 멈췄다. 서도진의 마지막 기록을 실험 재료처럼 자르는 일이었다. 이미 여러 번 그랬고, 앞으로도 그래야 했다. 그래서 더 수치스러웠다. 아버지를 찾겠다고 하면서, 가장 먼저 하는 일은 아버지의 목소리를 절단하는 것이었다.
도경은 공백 중심 조각만 따로 열었다. 원시 파형에는 낮은 융기가 있었다. 사람 음성이라면 숨을 들이마신 뒤 첫 음절이 놓일 자리. 코다라면 다음 응답을 부르는 압력의 끊김. 어느 쪽도 확정되지 않았다. 스피커에서는 거의 들리지 않는 마찰음만 났다. 도경은 이어폰을 빼고 눈으로 보았다.
파형 위 빈 구간은 길지 않았다. 4.8초. 손가락 세 마디쯤 되는 화면 폭. 그런데 모든 번역이 그 앞에서 멈추거나 옆으로 새었다. 마치 그 자리가 문장이 아니라 규칙의 구멍인 것처럼.
도경은 임시 입력 설정을 저장했다. 공식 기록에는 아직 올리지 않았다. 파일 이름을 쓰는 데 시간이 걸렸다. 평가도, 결론도, 사람 이름도 줄이고 싶었다. 결국 이렇게 남겼다.
`gap_bypass_test_local_01`
실행은 누르지 않았다. 오늘 필요한 답은 이미 나왔다. 무언가 빠져 있었다. 원자료에는 완전히 비지 않은 신호가 있고, 해류 출력에는 같은 길이의 빈칸이 남았다. 왜 빠지는지는 모른다. 손상도, 한계도, 의도도 아직 지워지지 않았다.
도경은 작업 폴더를 암호화하고 로컬 드라이브 깊은 곳으로 옮겼다. 규정 위반은 실행 전에도 시작될 수 있었다. 승인 없는 우회 설계를 만든 순간부터.
마지막으로 아버지 관련 코다 묶음을 다시 열었다. 재생은 하지 않았다. 화면에는 모계 7의 클릭열과 인간 음성 대역의 흐린 흔적이 겹쳐 있었다. 그 사이, 정확히 같은 폭의 빈 구간이 남아 있었다.
도경은 커서를 그 위에 올려 두었다.
아버지의 목소리가 있어야 할 자리에, 소리보다 또렷한 빈칸이 있었다.
이 화, 어떠셨나요?
미리보기 — 댓글은 지금 이 브라우저에만 임시로 저장됩니다. 배포하면 Cloudflare에 저장됩니다.