목록을 던지면 여기로 들어온다. 세션이 끝나면 채팅은 사라지지만 이 파일은 남는다.
규칙
- 한 줄에 하나. 하려는 것만 적고, 어떻게 할지는 적지 않는다.
- 상태는 셋뿐이다:
[ ]안 함 /[~]하는 중 /[x]확인까지 끝남. [x]는 직접 보고 확인했을 때만 붙인다. 코드를 넣은 것과 되는 것은 다르다.- 안 하기로 한 것은 지우지 말고
버림절로 옮기고 이유를 한 줄 적는다. 같은 걸 두 달 뒤에 다시 꺼내는 일을 막는다.
아래는 2026-08-18 기준, 지난 세션들의 목록에서 커밋으로 확인되지 않은 것을 모은
것이다. 이미 됐는데 여기 남아 있는 게 있으면 확인 후 [x]로 옮긴다.
- 할 일 목록에서 입력창이 안 나오는 버그 — 2026-08-02에 "일단 넘어가"로 미뤘고 그 뒤 언급 없음
- 삭제 후 데이터가 날아가는 현상 — 2026-08-10 목록에 있었으나 대응 커밋이 안 보임
- 태그가 여러 개라 길어질 때 두 줄로 흐르기 —
WrappingHStack은 있는데 적용 여부 미확인 - 앱 시작 시 알림 권한 요청 —
StartupPermissionRequest. 안내가 끝난 뒤 알림 → 위치 순서로 묻는다 (2026-08-18) - 앱스토어 리뷰 유도가 실제로 뜨는지 — 2026-08-05에 넣었고 08-11에 "잘 안 되는 것 같다"
- 대체 공휴일 표시 — 시뮬레이터에서 2026-08-17이 빨간 '대체공휴일'로 나오는 것을 직접 봤다 (2026-08-18)
- 영어 지원 (현재 기본 언어 한국어 전용으로 좁혀둠)
- 애플 워치 지원
- 결제 모듈
- 가격 A/B 테스트
- 수출 규정 문서 이슈 —
Info.plist에ITSAppUsesNonExemptEncryption넣어 해소 - 카테고리 분류 기준선 만들기 — 입력·기대 카테고리 쌍 30개.
docs/TRAPS.md참고
-
CONTRIBUTING.md가 feature 브랜치 + PR 절차인데 실제로는main직행이던 것 — 실제 기준(언제 브랜치, 언제 main)을 표로 정하고 "작은 단위 PR" 규칙은 폐기했다 (2026-08-18) -
DesignSystem/README.md가 없는 파일(PriorityTag,DemoPriority)과 틀린 hex 값을 가리키던 것 — 팔레트·컴포넌트 표를 실제 코드에 맞춰 고쳤다. M8로 계속 감시된다 (2026-08-18) -
README.md가 11바이트 스텁이던 것 — 기능·구조·문서 지도를 채웠다 (2026-08-18) - PR 템플릿의 "관련 테스트 통과" — 테스트 타깃이 생길 때까지
/verify훑음으로 읽는다고CONTRIBUTING.md에 명시했다 (2026-08-18) - 커밋 하나에 여러 작업이 섞이던 것 —
CONTRIBUTING.md커밋 절에 규칙을 넣었다 (2026-08-18)
- Xcode 템플릿 보일러플레이트 —
SceneDelegate빈 메서드 5개,AppDelegatedidDiscardSceneSessions. 본문 없이 영문 주석만 있던 것을 걷어냈다 - 버린 MoSCoW 우선순위 색
should/could/wont— 참조 0곳.must만 남겼다 (공휴일 이름·과부하 배너).DesignSystem/README.md팔레트 표도 같이 고쳤다 - 미참조 토큰·프로퍼티 —
Metrics.chipRadius,Metrics.listSectionGap,MonthPageMetrics.compactRowHeight,CategoryColorPalette.colors,TodayTodoWidgetView.remaining,MonthLayout.weekRowIndex(of:) - 미사용
import SwiftData3개 —CategoryEditorSheet,TodoDetailSheet,ToggleTodoCompletionIntent -
Mosco/build/18MB 작업 폴더 삭제 (BACKLOG 이전 항목 해소) - 카테고리 편집에 "알림 권한 거부" 안내가 없다 —
showsDeniedNotice라는@State만 있고 읽는 곳이 없었다(그래서 지웠다). 알림을 켜도 시스템 권한이 거부돼 있으면 사용자는 아무 말도 못 듣는다. 안내를 넣을지 정해야 한다 -
MoscoPalette.must이름이 기능과 안 맞는다 — 우선순위는 없어졌고 지금은 경고 빨강이다.alert같은 이름이 맞지만 호출부 3곳을 건드려야 해서 미뤘다 -
DayCell의 공휴일 라벨이MoscoPalette.must를 쓴다 —CalendarDayTone은 "달력 색과 팔레트 색을 일부러 분리한다"고 적어놨는데 여기서 섞였다. 값은 같아서(#EF4444) 화면은 그대로다.CalendarDayTone.holidayRed로 옮길 것 -
MoscoML.mlproj(1.4MB)·MLTraining/삭제 — 갈아탄 이유를docs/CATEGORIZATION.md에 적고 파일은 지웠다. 남길 값어치는 파일이 아니라 이유였다. 되살릴 일이 생기면 git 이력에 있다 (2026-08-19) -
StyleGuideView진입점이 없다 —#Preview로만 열린다. 설정에 디버그 진입점을 두거나, 규범 확인은 Xcode 프리뷰로만 한다고 정하거나
우선순위가 올라갔다 (2026-08-18). R2가 시뮬레이터를 닫으면서 테스트가 AI가 쓸 수 있는 유일한 검증이 됐다. 이게 되기 전까지 AI가 확인할 수 있는 것은 컴파일뿐이다.
순서대로 한다. 위에서부터 반복해서 깨진 순이다.
- 테스트 타깃 생성 —
MoscoTests, Swift Testing, TEST_HOST = App. App 스킴에 물려서 스킴 하나로 빌드와 테스트가 같이 돈다 (2026-08-18) - 날짜 경계 — 월말/월초에 같은 날짜가 두 번 나오지 않는다 ·
MonthLayoutTests8건 - 반복 일정 전개 — 3일짜리가 걸친 날짜 전부에 나온다 ·
RecurrenceTests - 반복 일정 완료 — 하루 완료가 다른 날 완료로 번지지 않는다 ·
RecurrenceTests - 블록 배치 — 날짜 바로 아래부터 쌓이고 빈 줄이 없다 ·
EventRowAssignerTests9건 - 시각 파싱 —
TimeExpressionParser로 꺼내고TimeExpressionParserTests21건으로 덮었다.4시~7시종료 시각, 오전/오후 해석, 오전/오후 12시 경계,오후 7시가N시패턴에 중복으로 안 잡히는 것까지 (2026-08-18) - 분류 기준선 — 입력·기대 카테고리 쌍 30개로 임계값
0.35검증 (docs/TRAPS.md) -
CLAUDE.mdR1을 "빌드와 테스트가 통과하기 전에는 보고하지 않는다"로 확장 (2026-08-18)
순수 로직을 덮은 뒤 화면 흐름을 UI 테스트로 남긴다 — 첫 실행·튜토리얼·할 일
만들기·삭제 확인 순. /verify 목록에서 테스트로 옮긴 항목은 그 목록에서 지운다.
- UI 테스트 — 첫 실행과 튜토리얼 건너뛰기
- UI 테스트 — 한 줄 입력으로 할 일이 만들어진다
- UI 테스트 — 삭제 확인 뒤 다른 데이터가 남아 있다
받은 즉시 적는다. 착수 순서는 갈림길 답을 받고 정한다.
- PR마다 빌드 + 테스트 자동 실행
- 배포 자동화 범위 미정 — TestFlight까지인지, 스토어 제출까지인지
- 막는 것:
GoogleService-Info.plist가 저장소에 없다. 서명은DEVELOPMENT_TEAM = W5QTRMS954로 박혀 있다. 둘 다 Secrets 처리가 필요하다
- 이탈 감지 —
TutorialFunnel. 단계를 자국으로 남겨두고 다음 실행에서 읽는다. 이탈은 그 순간에 못 잡는다(앱이 죽을 때는 이벤트를 보낼 시간이 없다).reason: abandoned로 건너뛰기와 구분해서 센다 (2026-08-19) - 완료·스킵은 이미 기록되고 있었다. 문자열을
TutorialOutcome으로 묶었다 - 사용자 식별 —
AnalyticsIdentity. iCloud 키–값 저장소에 UUID를 두어 재설치·기기 교체를 건너온다.PRIVACY.md에 수집 항목으로 적었다 (2026-08-19)
- 캘린더 하루치 화면과 오늘 할 일 탭에 시간표 보기 추가 (2026-08-19)
- 마지막으로 고른 뷰 모드가 유지된다 — 두 화면이 같은 값을 공유한다. 화면마다 따로 기억하면 같은 하루를 두 곳에서 다르게 보게 된다
- 시간 없는 할 일은 축 위쪽 '시간 미정'에 모은다. 아무 데나 놓으면 거짓말이 되고, 빼면 화면에서 사라진다
- 시간표에서 블록을 끌어 시각 바꾸기 — 이번엔 안 했다. 끄는 동작이 목록에서는 순서, 시간축에서는 시각이라 뜻이 갈린다. 필요해지면 그때 정한다
- 설정 토글이 권한 상태를 안 따른다 —
PermissionGate(순수 로직, 테스트 11건)로 판정을 옮기고 알림·라이브 액티비티·날씨 세 토글을 전부 물렸다. 권한이 없으면 꺼진 것으로 보이고, 거부 상태에서 켜려 하면 시스템 설정으로 보낸다 (2026-08-18) - 앱 시작 시 필요한 권한을 모두 요청 —
StartupPermissionRequest로 되살렸다. 알림 → 위치 순서로 줄 세워 묻는다 (2026-08-18) - 튜토리얼과 겹치는 순서 — 안내가 끝난 뒤에 묻는다. 앱을 한 번 보여준 뒤에 물어야 무엇에 쓰는 권한인지 알고 고를 수 있고, 한 번 거부되면 다시 못 묻는다
tools/deadcode_audit.py로 훑었다. Swift 코드는 깨끗하다 — 미참조 심볼 0건,
통째로 죽은 파일 0건, 미발생 이벤트 0건, 미사용 에셋·문자열 0건.
남은 낭비는 코드가 아니라 타깃 밖 파일이었다.
-
MoscoML.mlproj+MLTraining/삭제 (1.4MB) -
screenshot/5장 3.3MB — 남긴다 (2026-08-19 결정). 코드·문서 어디서도 참조하지 않지만 App Store 제출용 원본이다. 저장소 무게보다 원본을 잃는 쪽이 비싸다.deadcode_audit.py의 "타깃 밖 파일"에 계속 뜨겠지만 지우지 않는다 -
PermissionState.notRequired제거 — 방금 만든 PR(#6)에 "나중에 쓸까 봐" 넣고 안 쓴 값이었다. 도구가 자기가 만든 죽은 코드를 바로 잡았다 — 이게 한 번 훑고 마는 대신 검사를 남긴 이유다 - periphery(표준 도구)는 이 프로젝트에서 못 쓴다 — Xcode 16 폴더 동기화 그룹을 이해하지 못해 소스 목록이 빈 채로 돌고 "깨끗하다"고 답한다. 죽은 코드를 심어 확인했다
시간표 검증에서 나온 것 셋 + 새 요청 셋.
- 눈금 폭 52 → 62, 눈금과 블록 사이 8pt (2026-08-19)
-
오전 01되돌림 — 오전/오후를 바뀌는 자리에서만 붙인다. 폭은 글자를 깎지 말고 오른쪽 정렬로 맞춘다. 규범 특례도 같이 걷어냈다 - 롱프레스 메뉴 —
TodoActions수정자로 꺼내서 목록 셀과 시간표 블록이 같은 것을 쓴다. 메뉴만이 아니라 메모 시트·경고·삭제 확인까지 한 덩어리다
- 뷰 모드·검색·편집을 아이콘만으로. 상태가 바뀌면 아이콘도 바뀐다
(편집 중
checkmark, 검색 중xmark). 접근성 이름을 필수로 넣었다 (2026-08-19) - '오늘'은 글자로 남긴다 — 아이콘으로 옮길 모양이 없고, 모드 토글이 아니라 특정 날짜로 가는 버튼이라 성격이 다르다
- 캘린더·카테고리를 각각 row 하나로. 누르면 상세 화면으로 들어간다. 행에 개수를 같이 보여줘서 들어가 보지 않고도 뭐가 있는지 안다 (2026-08-19)
- 시스템 색 고르기로 강조색 선택 + 기본으로 되돌리기 (2026-08-19)
-
MoscoPalette.accent를 상수에서 계산 프로퍼티로. 호출부 27곳은 그대로 둔다 - 위젯까지 따라간다 — App Group에 hex를 저장하고 위젯이 읽는다.
바꾸면
WidgetCenter.reloadAllTimelines()로 곧바로 다시 그린다 - 읽을 수 없는 색 방지 — 흰색을 골라도 막지 않고 WCAG 3:1까지만 눌러 쓴다.
ThemeColorTests15건 - 색은 고르면 바로 적용한다. '적용' 버튼을 넣어봤다가 되돌렸다 — 설정 목록에 버튼이 갑자기 생겼다 사라지는 것이 낯설었다 (2026-08-19)
-
CategoryColorPalette.accent가 어디서도 안 쓰이고 있었다 — 위젯 달력의 '오늘' 동그라미가Color.accentColor(시스템 색)를 쓰고 있었고, 그건 규범 문서가 하지 말라고 적어둔 바로 그 자리였다. 고쳤다 - 시스템 피커의 저장 팔레트(+)는 공개 API로 못 감춘다. 없애려면 자체 팔레트로 바꿔야 하고 그러면 색 선택지가 좁아진다 — 지금은 시스템 피커를 유지한다
-
CategoryColorPalette.accentHex중복 상수 제거 — 기본색이 두 곳에 있으면 한쪽만 바뀌어 앱과 위젯 색이 갈라진다
- 라이브 액티비티 원격 자동 시작 —
pushToStartToken에 서버가 필요하다. 서버는 넣지 않기로 해서, 꾹 눌러 직접 시작하는 방식으로 대체했다 (2026-08-12) - Create ML 우선순위 분류기 — 온디바이스 임베딩 + 코사인 유사도로 교체했다. 학습 과정이 없어 카테고리를 사용자가 추가해도 즉시 대응된다 (2026-07-30)