오류 기록의 「실」과 「판」을 「스레드」와 「버전」으로 바꾼다
앱이 꺼졌을 때 남는 보고서 첫 줄에 thread 를 「실」, version 을 「판」으로 적고 있었다. 둘 다 지어낸 말이다.
함수 인자, 람다 인자, 부르는 곳, 시험 문구까지 다섯 자리를 묶어서 고쳤다.
고친 것마다 왜 그게 문제였는지를 함께 적습니다. 이 페이지는 손으로 쓰지 않습니다 — 고친 사실이 남는 곳은 커밋 하나뿐이라, 거기서 그대로 길어 올립니다.
앱이 꺼졌을 때 남는 보고서 첫 줄에 thread 를 「실」, version 을 「판」으로 적고 있었다. 둘 다 지어낸 말이다.
함수 인자, 람다 인자, 부르는 곳, 시험 문구까지 다섯 자리를 묶어서 고쳤다.
제목과 버튼 몫으로 220dp 를 빼고 있었는데 재보니 154dp 였다. 66dp 를 버리고 있었던 셈이다. 일정 추가 대화상자에서 「알림」 줄이 반쯤 잘려 보인 까닭이다.
노트8 화면을 픽셀로 쟀다 - 대화상자 642dp, 본문 488dp. 180dp 로 낮추면 본문이 528dp 가 된다. 남긴 26dp 는 제목이 한 줄 늘어나는 대화상자를 위한 여유다.
대화상자의 루트 인셋이 몇 초 뒤 0으로 돌아간다. 키보드는 그대로인데 「없음」으로 잡혀서 본문이 다시 넓어지고 아래 단추가 키보드 뒤로 들어갔다. 변지유 대표가 고쳐 달라고 하신 증상을 되살린 것이다.
한 번 올라오면 그 대화상자가 닫힐 때까지 올라온 것으로 본다.
「컬러링」을 「통화 연결음」으로 바꿨다(주석 59곳). 식별자 컬러링울리나 는 연결음울리나 로 바꾸고, 그것을 글자로 찾던 test_pc_repeat 도 함께 고쳤다.
음성 파일을 만드는 것을 「굽는다」고 적어 두었다. 소스 32곳과 시험 16곳이다. 진단 화면에 그대로 뜨는 글이다.
설정의 「컬러링」도 「통화 연결음」으로 바꿨다. 컬러링은 상대가 설정해 거는 쪽에 들리는 것인데, 이 기능은 내 폰에서 재생된다. 영어는 이미 Ringback message 였다.
창본문높이() 가 키보드 여부를 모른 채 늘 화면의 45%를 비워 두고 있었다. 노트8에서 일정 추가 대화상자 본문이 203dp 밖에 안 돼서 위치·메모·알림·반복이 스크롤해야 나왔다.
창의 루트 인셋으로 키보드가 올라왔는지 읽는다. 없으면 8%만 빼서 488dp 를 쓴다. 키보드가 올라온 동안은 예전 값 그대로다.
계산은 본문높이계산() 으로 떼어내 값으로 시험한다.
공유 화면을 이어서 여는 방법은 실제로 동작하지 않았다. 카카오톡은 전송 뒤에도 화면에 남아서, 빠링으로 돌아오기 전에는 다음 화면이 열리지 않는다. 대표가 보내 보시니 사진만 갔다.
메뉴에서 보낼 것을 고르면 공유 화면이 한 번만 열린다. 겹치던 「명함 정보와 이미지 함께 공유하기」와 부연 설명을 없앴다.
연락처 파일(vCard 3.0)을 추가했다. 카카오톡으로 받은 사람이 눌러서 바로 연락처에 저장한다 - 빠링을 안 쓰는 사람에게는 그 방법뿐이다.
카카오톡은 사진과 글을 한 꾸러미에 실으면 글을 버린다. 공유 창을 두 번 띄워 사진을 먼저 보내고 정보를 뒤에 보낸다. 첫 창이 닫히기를 기다렸다가 두 번째를 띄운다.
기존 「사진과 글 같이」는 남겼다 - 텔레그램처럼 한 번에 받는 앱에서는 그쪽이 편하다.
차례를 정하는 셈은 두번에나눌것 에 따로 두어 값으로 시험한다.
변지유 대표(2026-10-22): 「서클을 만들었을 때 마지막에 확인이라는 단어가 메뉴가 가려져 이렇게 길어질 때는 다 스크롤이 가능해야 돼. 네가 내가 하나하나 지정하지 않아도 정보가 가려지지 않게」
사진을 보니 서클이 다섯 개인 창에서 자판이 올라오자 「확인」이 화면 밖으로 나갔다. 맨 위 줄도 잘렸다.
창 안쪽 높이를 heightIn(max = 380.dp) 처럼 적어둔 자리가 열여덟 곳 있었다. 그 숫자가 맞는 것은 자판이 없는 큰 화면 하나뿐이다. 화면 크기를 보고 정하는 한 자리를 만들고([창본문높이]) 열여섯 곳을 옮겼다 - 남긴 둘은 사진 미리보기와 드롭다운이라 창 본문이 아니다.
창 안에서는 자판 높이를 못 읽는다(WindowInsets.ime 가 0을 준다). 그래서 화면의 45%를 자판 몫으로 잡아, 떴는지 모르고도 단추가 안 가리게 한다.
리마인더를 걸고 나서도 아무 말이 없었다. 말풍선에 표시가 붙지도 않아, 걸렸는지 알려면 메뉴를 다시 열어 「리마인더 해제」로 바뀌었는지 봐야 했다. 이제 「10월 22일 오후 9:04에 알려드립니다」로 알린다.
그 알림을 대화방 함수 안에 적었더니 레지스터가 255를 넘어 검사가 막았다. 글자를 짓는 일을 함수로 빼서 249로 돌렸다.
말풍선 하나로 어디서 멈췄는지 가르는 방법, 그리고 빌드 캐시가 옛 APK 를 꺼내 주어 레지스터 수가 거짓이 된 일을 남긴다.
변지유 대표가 예약 메시지가 안 갔다고 알려왔다(2026-10-22). 확인해 보니 예약 전송 기능 자체는 멀쩡했다 - 대표가 내게 보낸 예약 메시지는 제때 왔고, 시험 폰에서 건 것도 정각에 들어갔다.
남는 것은 그 상대에게 중계 키가 없는 경우다. 대화방 위에는 「가까이 있을 때만 메시지가 갑니다」가 떠 있지만 예약 전송 창이 그걸 가린다. 예약은 나중에 보내는 일이라, 걸 때 모르면 그 시각에 안 가는 것을 나중에야 알게 된다.
달력으로 보내는 람다도 없앴다. 부르는 쪽 셋이 똑같은 람다를 적고 있었다 - 창에서 바로 하면 그 셋이 사라지고 인자도 하나 준다.
단계마다 그 단계 기능만 켜고 확인하므로, 둘이 만나는 자리는 아무 단계에서도 안 본 상태가 된다. 조합표를 적고 하나씩 짚은 결과도 함께 남긴다.
셋을 따로 넣었는데 겹치는 자리를 안 봤다. 하루에 세 번 같은 모양으로 나왔다 - 기능을 나눠 올렸으면 마지막에 조합을 짚어야 한다.
알림을 껐는데 「다음 차례부터 울립니다」라고 했다. 반복만 보고
알림 단추를 안 봤다. 알림이 꺼져 있으면 반복이어도 안 울린다.
반복인데 담았다는 알림이 울린다는 말을 안 했다. 지난 날짜로 걸면
「앞으로 올 것」이 없다고 세어 조용한 문구가 나왔다. 반복은 다음 차례가
늘 있으므로 울린다고 말해야 한다 - 안 그러면 알림을 켜둔 사람이
「아무 말도 없네」라고 여긴다.
「폰 달력에도 넣기」가 반복을 안 넘겼다. 빠링 달력에는 매일 서는데
폰 달력에는 하루만 있으면 어느 쪽을 믿어야 할지 알 수 없다. 되풀이
규칙(FREQ=DAILY·WEEKLY·MONTHLY)을 함께 넘긴다.
지난 일정도 담을 수 있게 되면서 생긴 빈틈이다. 「매달 1일」을 이번 달 1일부터 걸면 첫 차례가 이미 지나서 알람이 하나도 안 걸리는데, 울린 뒤에 다음을 거는 구조라 한 번도 안 울리면 영영 안 울린다.
첫 차례가 지났고 반복이면 다음 차례에 건다. 반복이 아니면 그대로 두고, 지난 일정에 알람을 거는 일은 알람때들 이 가린다.
안내도 갈랐다. 반복이면 다음 차례부터 울리는데 「알림은 울리지 않습니다」라고 적는 것은 거짓이다.
지났고 반복 없음 달력에는 담기지만 알림은 울리지 않습니다 지났고 반복 있음 달력에는 담기고, 알림은 다음 차례부터 울립니다
노트8에서 확인했다. 10월 21일 오전 9시 · 매일 · 1시간 전으로 담으니 알람이 10월 23일 08:00 에 걸렸다(22일 9시는 이미 지났다). 지우니 알람도 함께 거둬졌다.
세니 대표 요청을 네 번에 나눠 올린 과정과, 그 사이에 화면을 열어보다 찾은 것들을 적었다.
세니 대표 요청(2026-10-22): 「일정에서 이미 지나간 일정은 등록할 수 없는데 그것도 등록할 수 있게해줘.」
어제 있었던 약속을 기록으로 남길 수 있어야 한다 - 지난 일정도 달력에 남긴다는 뜻과 같은 줄기다. 막지 않는 대신 무엇이 달라지는지 적는다.
- 지난 때를 골라도 담긴다. 「지난 시각입니다. 달력에는 담기지만 알림은
울리지 않습니다」로 안내한다
- 말에서 찾아낸 약속은 그대로 거른다. 「어제 세 시에 만났지」 같은 지난
이야기에서 약속을 만들어내면 달력이 지저분해진다
- 지난 것만 담았으면 담았다는 알림에 시점을 안 적는다. 알람이 안 걸리는데
「1시간 전에 울립니다」라고 말하면 거짓이다
대화방에서 글을 찾는 동안에는 맨 아래로 내려가는 단추를 안 낸다. 오른쪽 아래에 붙어 있어서 찾아낸 말풍선의 글자를 가렸다. 찾을 때는 위아래 화살표로 옮기므로 그 단추를 쓸 일도 없다.
설정의 「서버를 쓰는 기능」 칸에는 「아래 기능만 빠링 서버가 필요해서 끌 수 있게 했습니다」라고 적혀 있고, 코드 주석에도 「여기 없는 것은 서버를 안 쓴다는 뜻이고, 그게 이 자리의 진짜 값이다」라고 적어뒀다. 그런데 명함 인식이 빠져 있었다 - 명함 사진도 서버로 간다.
- 자막·통역, 빠타 비서 옆에 명함 인식을 둔다. 끄면 폰에서만 인식한다
- 명함을 읽는 두 자리가 그 설정을 따른다
사람이 눈으로 세는 것으로는 또 빠뜨리므로 검사를 둔다. SttClient 의 어떤 함수를 부르는지 이름을 모아, 설정에 자리가 없는 이름이 나오면 멈춘다. 자리 수가 아니라 이름을 보는 까닭은, 같은 함수를 여러 곳에서 불러도 설정은 하나면 되기 때문이다.
명함 읽는 줄을 나눠 적으면서 소스 글자를 통째로 맞추던 시험 셋이 깨졌다. 그 시험들이 볼 것은 세우기·읽기·자르기의 차례지 인자를 어떻게 적었는지가 아니라, 자리만 보도록 고친다.
둘 다 노트8에서 화면을 보고 찾았다.
일정 추가 창을 오늘로 열면 아침 아홉 시가 이미 지나 있었다. 빨간 글씨가 뜨고 단추가 꺼져서, 오늘 일정을 넣으려던 사람이 시각을 손수 고쳐야 했다. 지났으면 다음 정시로 올린다. 그 날 안에 남은 정시가 없으면 아홉 시 그대로 둔다 - 날짜를 멋대로 넘기는 것보다 안내가 뜨는 쪽이 낫다.
명함 항목을 다듬을 때 줄바꿈을 그냥 걸러서 앞뒤 글자가 붙었다. 세 줄짜리 주소가 「2층제2사무실」·「11층공장」이 됐다. 공백으로 바꾼다. 그 전에 담긴 명함은 저장소에 줄바꿈이 남아 있지 않아 못 고친다 - 다시 찍거나 손으로 고치면 그때부터 바르게 담긴다.
세니 대표 요청(2026-10-22) 4단계. 이것으로 아홉 가지가 다 들어갔다.
- 일정 추가 창에 반복 단추와 주기 고르기를 둔다 - 매일·매주·매달
- 일정 줄에 「매일」처럼 주기를 적는다
- 반복을 지울 때는 먼저 묻는다. 한 줄을 지워도 모든 차례가 사라진다.
달력 탭과 방 안 목록 양쪽에 둔다
담기는 것은 하나뿐이고 달력에 보일 때 펼친다. 1년치를 담으면 365줄이 설정에 쌓이고 하나를 지우려면 365줄을 지워야 한다.
고친 것 셋.
- 달마다 더할 때 늘 원래 날짜에서 센다. 1월 31일에 한 달씩 거듭
더하면 2월 28일이 되고 거기서 또 더해 3월 28일이 된다
- 울린 시각에 알람 분을 더해 약속 시각을 되찾는다. 30분 전에 울린
시각으로 다음을 찾으면 같은 차례를 다시 집고, 그 알람은 이미 지나서
아무것도 안 걸린다 - 반복이 첫 번만 울리고 끝난다
- 탭 옆 숫자는 담긴 것을 센다. 펼친 것을 세니 매일 반복 하나가 361이
됐다
방 안 일정은 줄 번호가 아니라 글 번호로 지운다. 펼치면 같은 약속이 여러 줄이라 번호가 어긋난다.
세니 대표 요청(2026-10-22) 3단계.
- 일정 추가 창에 알림 스위치를 둔다. 끄면 안 울린다
- 언제 울릴지 여섯 가지에서 고른다 - 약속 시각·10분 전·30분 전·
1시간 전·3시간 전·하루 전. 기본은 1시간 전
- 고를 것을 여섯 줄로 늘어놓으면 창이 그만큼 길어져 아래 칸이
밀린다. 한 줄로 두고 눌러서 고른다
전에는 한 약속에 셋이 걸렸다(세 시간 전·한 시간 전·그때). 그 칸이 생기기 전에 담은 일정은 하던 대로 셋이 울린다 - 판을 올렸다고 알람이 줄면 안 된다.
담았다는 알림 문구에 「3시간 전, 1시간 전, 그리고 약속 시각에」가 박혀 있어서 고른 것과 어긋났다. 고른 대로 적는다.
보관함에서 예약 전송 창이 「전송합니다」라고 말하던 것도 고친다. 받을 사람이 없는 자리라 그 시각에 내 보관함에 담기는 것이다.
세니 대표 요청(2026-10-22) 2단계.
- 일정 추가 창에 위치 칸과 메모 칸을 둔다. 둘 다 안 적어도 된다
- 적은 것은 일정 목록 줄에 함께 보인다. 안 적었으면 그 줄이 없다
- 창이 400dp 로는 모자라 메모 칸이 잘려서 520dp 로 넓힌다
저장 꼴에 가운데 칸을 두고 이름을 붙인다(where=강남역). 알림과 반복이 남아 있어 칸이 두 번 더 느는데, 자리로만 세면 그때마다 꼴이 바뀌어 한 판 건너뛴 폰의 달력이 텅 빈다. 옛 꼴 네 칸짜리 줄도 그대로 읽는다.
세니 대표 요청(2026-10-22).
사람 고르기 - 아무도 안 고르면 나만의 일정이 된다. 여러 명도 고를 수 있다 - 보관함은 연락처에 없어서 이름 자리가 「알 수 없음」이었다. 단체방을 가리는 줄 옆에서 함께 가린다
시각 칸 - 시계판을 돌리는 대신 숫자를 친다. 누르면 목록이 열리고 굴려서 고를 수도 있다. 예약 전송과 같은 칸을 쓴다 - 목록이 포커스를 가져가면 칠 수가 없어서 팝업으로 둔다 - 친 글자는 뒤에서 읽는다. 앞에서 자르면 두 자리가 찬 칸에 새 숫자가 안 들어간다
예약 전송 창에서 보관함일 때 「연락처 첨부」를 뺀다
읽어주는 쪽이 내가 쓴 것을 건너뛴다. 보관함은 전부 내가 쓴 것이라 이 설정을 켜도 영영 아무 일도 일어나지 않는다. 켜본 사람은 고장으로 읽는다.
같은 창의 주석이 이미 예고하고 있었다. 상대가 있어야 성립하는 줄이 넷 있었다고 적혀 있는데 읽어주기가 다섯 번째였다. 넷을 막는 변수가 바로 윗줄에 있는데 읽어주기만 조건 밖이었다.
노트8에서 보관함 메뉴는 넷으로 줄고 1대1 대화방에는 그대로 남는 것을 확인했다.
보관함에서 대화방 배경을 열면 상대 화면도 같은 배경으로 바뀝니다 가 뜨고 상대방도 같이 가 골라져 있었다. 보관함에는 상대가 없는데도 보낼 곳이 없는 전송을 시도하게 된다.
이 화면이 isGroup 하나로만 갈랐기 때문이다. 단체방은 이미 막아뒀는데 보관함이 1대1 로 취급됐다. 둘을 혼자쓰나 로 묶었다 - 배경을 보낼 상대가 없다는 점이 같다.
소스 글자를 찾던 시험 둘도 함께 고쳤다. 내 변경을 잡아준 것은 맞지만 이름을 바꿀 때마다 함께 고쳐야 하는 꼴이라, 혼자쓰나 의 정의까지 확인하도록 바꿔 뜻을 시험에 담았다.
노트8에서 내 화면만 바뀝니다 로 바뀌고 고르는 칸이 사라진 것을 확인했다.
의장님이 묻지 말고 자율로 하라고 하셔서, 답을 기다리던 항목 셋을 판단해 정리했다. 연락처와 연령 기준은 이미 들어 있었고 회사 이름만 없었다.
이름은 사이트 첫 페이지와 같은 Winner Brothers Group 으로 썼다. 같은 사이트 안에서 두 가지 이름을 쓰면 읽는 사람이 다른 회사로 읽는다.
마지막 수정일도 고쳤다. 내용이 바뀌었는데 날짜가 그대로면 읽는 사람이 예전 방침으로 안다.
의장님 답: 서버 없다고 하는 건 대화와 통화 내용을 서버를 통해서 하지 않는다는 취지다. 명함 OCR 때문에 서버를 쓰는 건 당연하다.
개인정보처리방침은 이미 정확했다. 명함 사진을 보내는 것, 저장하지 않는 것, 인터넷이 없으면 폰에서 읽는 것이 다 적혀 있다.
어긋난 것은 앱 설정 화면의 문구 하나였다. 내 정보가 기기 밖으로 나가지 않는다고 해서 방침보다 넓게 말했다. 대화와 통화 내용은 서버를 거치지 않습니다로 바꿨다. 열 개 언어 모두 고쳤고 노트8에서 확인했다.
한국어 규칙도 금지어 표를 지우고 한 줄로 바꿨다. 목록을 늘리는 방식이 효과가 없었다.
보관함은 내가 나에게 쓰는 자리라 보낼 상대가 없고 혼자 하는 투표도 뜻이 없다. 사진 파일 위치 예약은 그대로 둔다 - 담아두는 것이 바로 그 자리의 쓰임이다.
이것은 어젯밤에 고친 것과 같은 버그다. 보관함 줄에 연락처 보내기를 내지 않는다고 고쳤는데 고친 곳은 대화 목록의 미는 버튼 한 군데뿐이었다. 같은 기능이 첨부 메뉴에도 있는데 세지 않았다.
내가 만든 검사도 못 잡았다. 그 검사는 isRoom 을 쓰면서 보관함을 안 보는 곳을 세는데, 첨부 메뉴는 둘 다 안 썼다. 아무것도 안 가르는 곳은 못 잡는다 - 검사의 한계이고 화면을 직접 보는 일을 대신할 수 없다.
노트8에서 보관함은 넷, 일반 대화방은 여섯이 나오는 것을 확인했다.
heredoc 이 역슬래시를 한 겹 먹어서 세 줄이 한 줄로 붙고 표시가 일부 사라졌다. 메모리에 적어둔 함정인데 또 걸렸다. 글자 코드로 조립해 고쳤다.
명함첩에 박세연\, 주식회사 빠타랩스\, 010-3333-4444\ 가 서 있었다. 이 명함은 코드 주석에 이미 적혀 있다 - 2026-10-16 에 같은 것을 보고 고쳤다고 적어뒀다.
그때 고친 것은 들어오는 길뿐이었다. 이미 저장된 명함은 아무도 안 건드려서 엿새가 지나도 그대로 남았다. 그 상태로 연락처에 저장을 누르면 폰 주소록에 망가진 번호가 들어가고, 명함 공유를 하면 상대에게도 그 값이 간다.
저장소에서 읽을 때 한 번 다듬는다. 한 곳에서 거치면 화면도 연락처 저장도 명함 공유도 함께 깨끗해진다.
노트8에서 네 곳이 모두 사라진 것을 확인했다.
여섯 번째 버그가 안 보내고 보냈다고 한 것이라, 같은 모양이 더 있는지 문구 열 개를 하나씩 봤다. 문제가 있던 것은 이미 고친 하나뿐이었다.
배경 보내기는 결과를 보고 문구를 가르고, 연락처 공유와 전달은 고르는 화면이 미리 거른다. 조용히 return 하는 길이 둘 있지만 그 자리까지 가지 않는다.
안 적어두면 다음에 같은 검토를 처음부터 반복한다.
scan-saved-blind.py 가 세는 19곳을 하나씩 봤고 전부 문제가 없었다. 상태 점은 presenceColor(OFFLINE) 이 null 이라 안 뜨고, 식구 목록과 방 이름은 단체방에서만 뜨고, 예약 연락처 목록은 contacts 를 쓰는데 거기 보관함이 없다.
안 적어두면 다음에 같은 검토를 처음부터 반복한다. 상한 19가 확인된 수이지 고칠 것이 19개 남았다는 뜻이 아니라는 점도 적었다.
대화 내용을 비울 때 「내 폰에서만」을 골라도 「삭제했습니다. 상대에게도 삭제 요청을 보냈습니다」가 떴다. 아무것도 안 보냈는데 보냈다고 말한 것이다. 조건이 !both || r == SENT 여서 내 폰에서만이 성공 가지로 빠졌다. 보관함에서는 상대 자체가 없는데 상대에게 보냈다고 했다.
까닭은 내 폰에서만일 때 쓸 문구가 아예 없었기 때문이다. 있는 것은 보낸 뒤의 결과 문구 셋뿐이었다. 1대1, 단체방, 보관함 세 경우에 맞는 문구를 새로 만들었다.
고르는 셈은 비운뒤안내 로 화면 밖에 두었다. 문자열 번호를 돌려주므로 값으로 확인할 수 있다.
옛 조건으로 되돌려 두 시험이 빨갛게 되는 것을 확인하고 되돌렸다.
보관함 메뉴와 파일 목록 제목이 둘 다 주고받은 파일 3개 였다. 보관함에는 상대가 없으니 주고받은 것이 아니라 내가 담아둔 것이다.
두 곳을 함께 고쳤다. 같은 문구를 쓰는데 한쪽만 고치면 같은 목록이 어디서 열렸느냐에 따라 다른 말을 한다. 시트가 보관함 여부를 인자로 받게 했다.
노트8에서 두 자리 모두 확인했다.
보관함을 지우려 하면 사람용 문구가 그대로 떴다. 주고받은 메시지와 친구가 삭제된다고 하고, 상대 폰에는 그대로 남으니 QR 을 다시 스캔하라고 했다. 「상대 폰의 메시지도」 버튼까지 나왔다.
보관함에는 상대가 없다. 내가 담아둔 것이고, 사라질 친구도 그대로 남을 상대 폰도 다시 스캔할 QR 도 없다. SavedBox.kt 에 적힌 네 가지와 같은 종류다.
ScopeAsk 가 상대 유무를 받게 했다. 상대가 없으면 그 버튼과 아래 설명을 감추고 확인 버튼이 「삭제」가 된다. 본문도 보관함용 문구를 쓴다. 고친 자리는 셋이고 가르는 것은 상대있는대화인가 하나가 맡는다.
노트8에서 창을 띄워 확인하고 그만두기로 닫았다. 아무것도 지워지지 않았다.
대화 목록에서 보관함 줄을 옆으로 미니 그 버튼이 나왔다. 보관함은 내가 나에게 쓰는 자리라 보낼 상대가 없고, 보내면 받는 쪽 목록에 쓸 수 없는 연락처가 들어간다.
단체방은 이미 막아뒀는데 보관함은 빠져 있었다. 가르는 조건이 if (f.isRoom) 하나여서 보관함이 그물을 빠져나갔다. SavedBox.kt 맨 위에 이 일이 예고되어 있었다 - 네 곳이 각자 isSaved 를 보면 다섯 번째 자리에서 또 빠진다고. 미는 버튼이 그 다섯 번째였다.
연락처보낼수있나 를 그 파일에 두고 화면은 부르기만 한다.
RenameFromListTest 가 소스 글자를 찾고 있어서 함께 고쳤다. 값으로 확인하는 쪽은 SavedBoxTest 에 두고, 그 시험은 화면이 그 판단을 쓰는지만 본다.
노트8에서 버튼이 사라진 것을 확인했다.
직역 검사가 상한을 넘겼다. 오늘 쓴 주석에서 「머리글」이라는 말을 만들어 썼는데, 그 검사가 세는 「머리」에 걸렸다. 「섹션 제목」으로 바꿨다.
CardList.kt 의 「머리글자」는 이름 첫 글자라서 다른 말이다 - 건드리지 않았다.
메모리 금지어 표에도 한 줄 넣었다.
노트8에서 test 를 검색하니 단체방 하나가 나왔는데 머리글은 친구 1명 이었다. 사람과 대화방을 같은 말로 세면 내 친구 중에 testroom 이 있나로 읽힌다.
목록은 그대로 섞어 보여준다. 탭을 나누면 찾는 사람이 어느 탭에 있지를 먼저 고민해야 하는데 머릿속에는 그 구분이 없다. 바로잡은 것은 머리글의 단어뿐이다. 이제 친구 1명 · 대화방 2개로 나온다.
보관함도 따로 센다. 혼자 쓰는 메모장이라 친구로 세면 친구 수가 하나 늘어 보인다. 셈에서 보관함을 먼저 보는데, 순서를 뒤집어 테스트가 실패하는 것도 확인했다.
노트8에서 두 경우를 모두 확인했다.
하루에 두 번 같은 이유로 검사가 멈췄다. 앞에 돌린 gradle 의 데몬이 build/ 안의 파일을 잡고 있어서 lint 캐시와 classes.dex 를 건드리지 못했다. 코드 문제가 아니다.
고치는 절차를 메모리에 적어뒀는데도 같은 날 두 번 걸렸다. 사람이 기억해야 하는 절차는 반드시 잊는다. check-all.sh 의 run 이 직접 처리하게 했다.
빌드 작업이 실패하면 데몬을 멈추고 린트 캐시를 지운 뒤 한 번만 다시 해본다. 컴파일 오류일 때는 다시 하지 않는다 - 같은 결과이고 시간만 두 배로 든다. 오류 메시지의 한국어는 콘솔 인코딩 때문에 깨지므로 영문 표시로만 판단한다.
실제로 잠긴 상태에서 돌려 같은 검사가 통과하는 것을 확인했다.
평서문에 「~요」체가 섞여 있었다. 「아직 만든 폴더가 없어요」 같은 것들을 「~습니다」로 바꿨다. 「확인해주세요」 같은 명령문은 그대로 두었다 - 그쪽은 표준 UI 문구다.
직접 만들어 쓴 표현도 고쳤다. 앞으로 잡힌 것이 없습니다는 예정된 일정이 없습니다로, 그 밖은 기타로, 빼기는 제거로 바꿨다. 모두 17개다.
문구를 검사하는 테스트 세 개를 먼저 확인하고, 자리 표시자와 핵심 단어를 지키면서 바꿨다. 노트8에서 바뀐 화면을 확인했다.
한국어 문구 994개 가운데 42개는 「메시지」를 쓰고 6개만 「글」을 쓰고 있었다. 6개 모두 최근에 추가한 것이다. 많은 쪽으로 맞춘다.
「보낸 글이 줄에만 서고」도 「보낸 메시지가 전송 대기에만 쌓이고」로 고쳤다. 줄에 선다는 표현은 업계에서 쓰지 않는다.
노트8에서 바뀐 문구를 확인했다.
선택 목록에는 「연락 불가」만 나오고 중계 키가 없다는 표시가 없었다. 두 표시는 뜻이 다르다 - 연락 불가는 지금 연결돼 있지 않다는 뜻이고, 중계 키 없음은 멀리 있으면 아예 전달되지 않는다는 뜻이다. 선택 목록에만 없으면 메시지가 안 갈 사람을 모르고 단체방에 초대한다.
단체방 참여자 목록과 1:1 대화방 상단 배너가 쓰는 같은 문구를 넣고, 같은 안내를 쓰는 화면 개수를 고정하는 테스트를 남겼다. 조회는 목록을 그릴 때 한 번만 한다.
직접 만들어 쓴 조어를 표준 용어로 바꿨다. 가까이만띠는 중계없음안내로, 최근고를사람은 최근대화상대로 바꿨다. 주석도 같이 고쳤다 - 자리는 화면으로, 세운다는 표시한다로, 띠는 배너로.
레지스터 개수는 제한이 아니라는 지적을 개발기록에 반영했다. 숫자는 함수가 커지고 있다는 신호로만 본다.
CLAUDE.md 를 새로 만들어 한국어 규칙을 맨 위에 적었다.
중계 키가 없으면 멀리 있을 때 글이 줄에만 서는데, 화면은 「연락 불가」 라고만 했다. 그 말로는 기다리면 되는 일인지 고쳐야 하는 일인지 가릴 수가 없다 - 세니 대표가 이틀 동안 글을 못 보냈다(의장님 2026-10-21: 「재발하지 않게 해줘」).
그 사정이 진단 화면·방 식구 목록·연락처 고르는 줄에는 적혀 있었는데, 정작 글을 보내는 자리인 대화방에는 없었다. 1:1 대화방 맨 위에 한 줄을 세우고, 누르면 까닭과 고치는 법이 나오게 했다. 거기서 바로 내 초대 링크를 보낼 수 있다 - 중계 키는 손잡기나 친구 수락에 실려 오는 값이라 고치는 길이 그것 하나다.
방에는 안 세운다. 식구마다 사정이 달라 한 줄로 말할 수 없고, 거기는 식구 목록이 사람별로 적어준다.
노트8에서 중계 키 자리를 0 으로 채운 초대 링크로 상대를 만들어 띠와 창을 확인했다.
고르는 목록은 이름 차례로 선다. 그런데 새 대화를 여는 사람이 고르는 상대는 대개 방금 말을 주고받은 사람이고, 이름 차례에서는 그 사람이 목록 한가운데 묻힌다(의장님 2026-10-21: 「대화 시작 화면을 좀 더 편리하게」).
찾기 칸 위에 최근에 오간 사람 여섯을 가로로 세운다. 한 번도 안 오간 사람은 안 세우고, 같은 때면 키 차례로 자른다 - 안 자르면 열 때마다 줄이 바뀌어 누르는 순간에 다른 사람이 그 자리에 온다.
노트8에 올려 두 가지를 더 고쳤다. 고른 사람 칩이 가린 이름을 안 써서 「빠타」가 둘일 때 누구를 골랐는지 알 수 없었다. 최근 줄에는 「연락 불가」라는 말이 없어서 골라 놓고 나서야 안 가는 것을 알게 됐다.
일정이 리마인더 안에만 있었는데 리마인더는 울리면 지워진다. 그 바람에 지난 약속이 달력에서 통째로 사라졌다(세니 대표 2026-10-21).
담는 곳을 둘로 갈랐다. 알람을 끄는 것과 일정을 지우는 것은 다른 일이다 - 일정을 지우면 알람도 함께 거둔다. 한 해가 지난 것은 떨군다.
이 판으로 올린 사람의 약속은 전부 리마인더 쪽에 있으므로 처음 읽을 때 한 번 옮겨온다. 한 약속에 알람이 셋 걸리므로 가장 늦은 것만 고른다.
노트8에서 옮겨온 뒤 달력에 점이 다시 찍히는 것을 확인했다.
날짜 읽기가 시각을 두 꼴로 받는데, 콜론 꼴에서는 오전·오후를 안 봤다. 하필 우리가 적는 일정 줄이 그 꼴이라, 받은 쪽이 그 줄을 눌러 제 일정에 넣으면 열두 시간이 어긋났다.
열두 시도 가린다 - 오전 12시는 자정, 오후 12시는 낮.
노트8에서 받은 글로 확인했다.
예약 파일 사본
붙인 파일은 걸 때 우리 폴더로 복사해둔다. 그런데 보내고 나서 지우는 자리가 없어서 폰에 그대로 쌓였다. 하루가 지나고 아무도 안 가리키는 것만 치운다 - 보낸 직후에는 아직 읽고 있을 수 있다.
가리키던 글이 없는 일정
알람은 글 번호로 담긴다. 대화를 비우면 그 글이 사라지는데 알람은 남아, 일정 목록에 제목 없는 빈 줄이 떴다. 알람이 그 글이 없으면 안 울리는 것과 같은 잣대를 쓴다.
그 밖에
연락처만 걸면 목록에 이름이 안 보이던 것, 파일 복사가 실패하면 아무 말 없이 안 걸리던 것을 고쳤다.
일정 창에서 지난 날을 고르면 단추가 조용히 꺼졌다. 막아놓고 말을 안 하면 누른 사람은 앱을 의심한다.
세니 대표 요청으로 사진·동영상과 연락처 첨부를 넣었다. 「파일 붙이기」를 「파일 첨부」로 바꿨다. 연락처는 두 키를 실어 보내는 글이라 보내는 길이 달라서 칸을 따로 뒀다. 중계 키가 없는 사람은 목록에 안 낸다.
고르는 자리마다 같은 이름이 둘 서던 것도 가렸다.
켤 때마다 알람을 다시 건다
안드로이드는 앱을 강제 종료하면 그 앱의 알람을 모두 지운다. 그런데 다시 걸어주는 자리가 걸 때·울린 뒤·재부팅뿐이라, 앱을 다시 켜도 걸어둔 리마인더와 예약 전송이 영영 안 울렸다. 목록에는 남아 있어서 아무도 모른다.
노트8에서 증명됐다 - 19:16 에 가야 했던 연락처가 앱을 켜자 19:27 에 나갔다.
세니 대표 요청이다.
이 방 일정
아무것도 없어도 달력이 보인다. 일정 있는 날에 점이 찍히고, 그 자리에서 바로 일정을 걸 수 있다.
홈 일정 탭
명함 옆에 일정 탭을 뒀다. 모든 방 일정이 한 달력에 모이고, 줄을 누르면 그 방으로 간다. 걸 때는 어느 방인지 먼저 묻는다.
예약 전송
사진·동영상과 연락처도 붙일 수 있다. 「파일 붙이기」를 「파일 첨부」로 바꿨다. 글 없이 파일만 걸면 목록에서 사라지던 것과, 「10분 뒤」를 눌러도 시각 칸이 안 따라오던 것을 고쳤다.
달력 셈은 화면 밖에 두고 값으로 잰다. 한 주의 시작 요일은 기기 설정을 따른다.
일정 줄에는 이미 날짜가 들어 있는데(plan_line 이 앞에 붙인다) 목록이 그 아래 시각을 또 적었다. 앞머리를 떼고 제목만 쓴다.
노트8에서 끝까지 돌려봤다 - 「내일 오후 2시에 회의 어때?」를 길게 눌러 10월 22일 오후 2:00 으로 잡히는 것, 알람 셋이 걸리는 것, 목록에 뜨는 것까지.
늘 「나머지는 다시 연결되면 자동으로 전달됩니다」였다. 참인 말이지만 사람을 틀린 쪽으로 보낸다 - 중계 키가 없는 사람에게는 「다시 연결」이 가까이 가는 것뿐이라 기다려도 안 간다.
중계 키가 없는 사람이 섞여 있으면 그렇게 말하고 친구 추가를 권한다. 글과 파일, 짝을 이루는 두 자리를 다 고쳤다.
PC 노드가 방 글에 읽음 확인을 안 보내던 것도 고쳤다. 방 번호에는 링크가 없어서 아무에게도 안 보내고 돌아섰다. 노트8으로 재서 확인했다 - 흐린 체크 둘이 뜬다.
단체방에 글을 보내는 것은 사람 수만큼 따로 보내는 것이다. 멀리 있으면 중계를 거치는데, 중계로 보내려면 상대의 중계 키가 있어야 한다. 그 키는 손잡기나 친구 수락에 실려 오고, 방에 같이 있다고 생기지 않는다.
그래서 한 방에서 어떤 사람에게만 글이 영영 안 갔고, 받는 쪽은 안 온 글이 있다는 것조차 몰랐다(의장님 2026-10-21 보고, 같은 날 허락).
아는 사람이 모르는 사람에게 알려주면 그 자리가 풀린다. 빈 칸만 채운다 - 세션에서 온 값이 더 믿을 만하다.
고르는 줄
네모 상자 하나로만 알리니 훑을 때 눈에 안 들어왔다. 고른 줄을 통째로 칠하고 얼굴 위에 표를 붙인다. 상자가 차지하던 칸이 없어져 한 사람이 더 보인다.
중계로 못 가는 사람
방에 같이 있다고 중계 키가 생기지는 않는다. 직접 손잡기를 했거나 서로 친구 추가를 했을 때만 생긴다. 그 사정이 아무 데도 안 적혀 있어서, 단체방에서 한 사람에게만 글이 안 가는 까닭을 찾을 길이 없었다.
식구 목록에 「가까이 있을 때만 글이 갑니다」를 적는다.
세니 대표 요청이다.
방 안 일정
말풍선에 때가 적혀 있으면 길게 눌러 일정에 넣는다. 대화방 메뉴에서 그 방 일정만 모아 본다. 담는 자리는 이미 있는 리마인더다.
짐작한 것은 글로 보여주고 고칠 수 있게 한다 - 「3시에 보자」에는 날짜도 오전·오후도 없다.
예약 전송
보낼 글과 시각을 한 쪽에 모았다. 시계판을 숫자 칸으로 바꿨다. 파일을 붙일 수 있고, 고르는 순간 우리 폴더로 복사해둔다.
대화방 화면 레지스터
말풍선 메뉴 백열아홉 줄이 let 안에 인라인돼 있었다. 떼어내고 할 일 여덟 가지를 한 칸으로 받아 286개에서 253개로 줄였다.
세니 대표 요청이다. 클립 단추 안에 자리를 잡았다 - 보내기 단추를 길게 누르는 길은 있는 줄 아무도 모른다.
리마인더와 같은 길을 쓴다. 알람은 가장 이른 것 하나만 걸고, 울리면 지난 것을 모두 보내고 다음 것을 다시 건다. 때가 지난 것도 보낸다.
재부팅 뒤 다시 거는 자리에도 같이 적었다. 방을 지울 때도 함께 거둔다.
노트8에서 「10분 뒤」로 걸어 15:45:16 에 받았다.
단체방 읽음 표시
세 명 방에서 한 명만 읽어도 모두 읽은 것과 같은 표시였다. 읽음 확인에 실려 오던 보낸 사람을 버리고 있었다. 글마다 읽은 사람을 적어두고, 방 사람 수만큼 모여야 읽음으로 친다. 그 전까지는 체크 둘을 흐리게 그린다.
읽은 사람을 안 싣는 옛 판이 보낸 확인은 예전처럼 바로 읽음으로 친다.
방 식구 목록에서 친구 추가
친구가 아닌 사람에게 단추를 내고 사이를 적는다. 상대가 이미 청해 뒀으면 그 부탁을 받아들인다.
초대·대화 시작 화면
방에 사람을 부르는 화면인데 제목이 「대화 시작」, 단추가 「시작」, 설명이 「한 명을 선택하면 1:1 대화」였다. 방 이름을 넘겨 제대로 말하게 했다. 이름으로 찾기, 고른 사람 칩, 연락 가능 여부를 더했다.
사진 보기가 아래 시트 뒤에 열려서, 뒤로가기 두 번 가운데 한 번이 보이지 않는 시트를 닫는 데 쓰였다. 사람 눈에는 사진에서 바로 대화방으로 간 것으로 보인다.
누를 때 시트를 먼저 닫고, 보기를 끌 때 다시 연다. 규칙은 FileSheetBack.kt 에 따로 뒀다 - 화면 안에 두면 시험이 글자만 보게 된다.
함께 들어간 것
- 지워진 파일도 줄을 남기고 흐리게 보여준다. 전에는 목록에서 그냥 사라져서
보낸 적이 있는지조차 알 수 없었다
- 전체·이미지·영상·음성·문서·그 밖으로 나눠 본다
- 갈래를 바꿀 때 시트가 오르내리지 않도록 최소 높이를 준다
- 말풍선 메뉴에 선택 복사를 넣는다
- 대화방 화면이 쓰는 레지스터를 274개에서 253개로 줄인다
## 입력 중이 샜다
의장님: 「나한테 입력 중인 게 아니라 다른 대화에서 대화하는 걸 내가 볼 수 있으면 안 되는 게 정상이잖아」.
코드에 설계가 그대로 적혀 있었다 - 「입력 중은 사람 키로만 오간다」. 전선에 참·거짓만 실려서 받는 쪽은 「누가 치고 있다」만 알았고, 그 사람이 보이는 모든 자리에 띄웠다. 단체방에서 친 것이 1:1 에도 뜨고 그 사람이 든 다른 방에도 떴다.
이제 어느 대화에서 치는지를 같이 보낸다. 받는 쪽은 그 대화 하나에만 띄운다. 방 사람 명단을 뒤져 짐작하던 것도 없어졌다.
예전 판이 보낸 것은 1:1 로 읽힌다. 그 판이 방에서 친 것은 여전히 1:1 에 뜬다 - 양쪽이 다 올라가야 끝나는 자리라 주석에 적었다.
## 나 자신과 중계 자리를 잡고 있었다
보관함은 나와의 대화라 내 키가 연락처에 들어온다. 거르지 않아서 내 중계 키로 자리를 계산해 그 자리에 앉고, 20초 뒤 다음 다이얼이 거기서 나와 만났다. 중계에 붙어 재보니 0.0초 만에 짝이 붙었다. 폰과 PC 양쪽 다 막았다.
## 선택 복사
세니 언니: 「전체글이 아니라 일부만 선택복사를 할 수 있었으면」. 이름도 언니가 「선택 복사」로 해달라고 해서 그대로 썼다.
말풍선에서 바로 끌게 하지 않았다 - 길게 누르기가 이미 메뉴를 여는 자리라 둘이 부딪힌다. 창을 띄우고 거기서 고른다.
집 규칙 둘을 어겨 시험이 잡았다. 창을 끝내는 버튼은 「확인」이고 (대표 지시 2026-10-06), 대화상자에는 시트색을 줘야 한다.
중계 키가 없으면 만날 자리를 계산조차 못 한다. 그런데 화면은 그저 「연락 불가」라고만 하고 까닭은 아무 데도 안 적혀 있었다.
2026-10-21 에 이것 때문에 한 사람이 이틀 동안 글을 못 보냈고, 찾는
데 몇 시간이 걸렸다. 중계 서버에 직접 붙어 자리를 재고 나서야 알았다.
진단 화면이 한 줄로 말해주면 그 시간이 안 든다.
중계로 보낼 수 있는가 중계로 보내려면 상대의 중계 키가 있어야 합니다. 없으면 보낸 글이 줄에만 서고 화면에는 「연락 불가」로만 보입니다.
빠타 중계 키 없음 그 사람의 연락처를 누군가에게 받거나 QR 을 다시 찍으면 채워집니다.
고치는 길까지 적는다. 둘 다 담아둔 값을 덮어쓰므로 틀려 있어도 풀린다.
DiagnosticsScreen 안에 두지 않았다 - 그 함수가 쓰는 레지스터를 더 늘리지 않으려는 것이다.
빈 칸만 채우고 있었다. 틀린 값이 들어 있으면 비어 있지 않으니 그냥 지나쳤고, 그 사람에게는 영영 안 닿았다 - 화면은 「연락 불가」라고만 하고 왜 그런지는 아무 데도 안 적힌다.
세니 언니 폰이 그랬다. 새 판으로 올리고 내 글을 받아도 내 쪽으로 보내는 길이 열리지 않았다.
중계 서버에 직접 붙어서 쟀다.
내 노드가 짝 자리에 앉아 있나 0.0초 만에 짝 붙음 - 앉아 있다 언니 앱이 제 문 앞에 앉아 있나 앉아 있다 언니가 짝 자리에 오나 한 번도 안 온다
자리는 두 사람의 키로 계산하므로, 안 온다는 것은 올 자리를 못 찾는다는 뜻이다.
세션이 섰다는 것은 상대의 Ed25519 신원키로 손잡기를 마쳤다는 뜻이라 거기 실려 온 중계 키는 담아둔 것보다 믿을 수 있다. 다르면 덮어쓴다. 중계로 온 글에 실린 값은 세션이 없어 그만큼 믿을 수 없으므로 빈 칸을 채우는 데만 쓴다.
PC 쪽은 이미 덮어쓰고 있었다(see_contact). 그래서 내 쪽 값은 맞고 언니 쪽만 틀렸다 - 한쪽만 고쳐져 있던 짝이다.
같이 고친 것: 권하는 스티커 둘이 뜻과 어긋났다. 「싫어」에 👇(아래를 봐라)가, 「미안」에 🙌(만세)가 들어 있었다. 😒 와 🙏 로 바꿨다.