사용자 요구('이거까지 하고 배포'): 통계·기록에서도 건강 데이터를 하루다님 스타일로.
전부 표시 전용 — HealthCache 인메모리 읽기만, HK 신규 조회·스키마·집계 수학 무변경.
- 통계 탭 맨 아래: 하루=지표 값 칩 카드 / 주간·월간(롤링 포함)=
'건강 지표 (일별)' 추이 카드(지표 선택 캡슐 메뉴·요일/일 축·단위 라벨, 분홍 단일 선)
+ '건강 지표 합계·평균' 표(분모=기존 '이미 시작된 날/주' 규칙 상속, 0 지표 생략)
- 기록 탭 목록 맨 아래 '건강 데이터' 섹션 — 그날 칩(과거 날짜도 캐시로)
- 표시 규칙: 지표=타일 선택 상속, 마스터 스위치=설정 '건강 데이터 표시'(문구 확장),
미연결·맥=숨김, 내보내기 미포함(비교 카드 전례)
- 값 공급 단일 지점 HealthDisplayValues 신설(수면=유효 표시 구간 키, 일기 카드도 위임),
칩 UI HealthValueChipGrid 공용 — 빌드 9 최적화 그대로 유지
- 도움말·팝업·설정 푸터·whats-new 3언어 갱신(새 키 5·수정 3, 전 카탈로그 0/0)
검증: 자가 검증 62/20/27/10 ALL PASS(수치 불변), 시각 QA(하루·주간[합계 53,966보 시드
검산 일치]·월간 롤링[30일 분모]·기록 목록 과거 날짜·ja·18.5[경과일 분모 4일 검산 일치]),
Debug·Store·18.5 빌드 그린. 종목별 운동 통계는 1.6 후보 보류. CURRENT_PROJECT_VERSION 10.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
1.4 기준 커밋 대비 카탈로그 추가 키 241건(IOS 170·위젯 35·워치 20·InfoPlist 2·워치위젯 14)
전수 번역 검수 + whats-new·프로모션·설명·신기능 팝업·도움말·스크린샷 세트 누락 점검:
- 워치·워치위젯 ja 용어 통일: 컴플리케이션 설정 설명 '表示する行動' → '表示するアクション'
(용어 규칙 행동=アクション 위반 2곳 — 유일한 규칙 위반)
- 신기능 팝업 en 자연화: "tap it to act right away" → "tap it to run the action right away"
- keywords.txt 1.5 보강: ko +건강,수면,걸음(88자)·ja +ヘルスケア,睡眠(95자), 기존 무삭제
(en은 97/100자로 여유 없어 유지 — ASC 각 로케일 키워드 란에 새로 붙여넣기 필요)
- 그 외 누락 0 확인: whats-new·설명·팝업 6항목·도움말(일기=전 기기, 건강=지원 기기 분기)
모두 1.5 기능 인벤토리와 일치, 스크린샷 원본 57+합성 63장 완비, 인텐트 메타데이터
'iPhone' 단어 금지 재확인, InfoPlist 건강 문구 3언어 확인
검증: 전 카탈로그 missing/stale 0, iOS Debug·Store·워치 빌드 그린, en 팝업 실렌더 확인.
빌드 번호 9 유지.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
사용자 울트라 실측: 컴플리케이션 착지 화면의 하단 실행 버튼이 아래가 살짝 잘림.
- 하단 버튼 제거, 아이콘 타일이 실행 버튼 (우하단 +/▶/■ 배지, 측정 중=노란 테두리+배지)
- 상태별 한 줄 힌트("아이콘을 누르면 시작/종료/1회 추가") — ja 40mm 한 줄 유지(축소 0.75)
- 작은 워치(높이<220pt) 컴팩트 메트릭 — 40mm에서도 힌트까지 스크롤 없이 한 화면
- 실행 경로는 기존 store.run 그대로(햅틱 포함), a11y 라벨은 기존 버튼 문구 유지
- 도움말 '행동 기록 컴플리케이션' 문구 갱신(3언어), 전 카탈로그 missing/stale 0
- 신규 검증 인자 -watchSeedSnapshot(페어링 없는 합성 스냅숏)·-watchOpenActionIndex
검증: 49mm(울트라)·46mm(26.2)·40mm(11.5) × 3상태 + ja 스크린샷 잘림 0,
워치·iOS Debug·Store 빌드 그린. 스키마·빌드 번호 무변경(9 — ASC 업로드 전).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
소킹 중 '1.4 대비 버벅임 증가' 보고의 원인 수정 (동작·수치 완전 불변):
- HealthCache/HealthIntervals 인메모리 캐시(세대 카운터 무효화) + workoutKeys 이중 load 제거
- DayMath.calendar 저장 프로퍼티화 (접근마다 Calendar 사본 생성 제거)
- 수면 백필 O(400일×샘플수) → 정렬+포인터 스위프 (퍼즈 3,000회 등가 증명)
- refreshRecent 캐시 기록 배칭 (일수×2회 → 총 2회)
- QuestProgress.spanValue/spanRawValue 하루 버킷화 (게이지의 미래 기록 즉시 반영 스펙 보존)
- 위젯 라이브 타임라인 makeEntry refresh 파라미터 (엔트리 7개×컨테이너 오픈 → 1회)
- 일기 건강 카드 칩 value() 이중 호출 제거
검증: 옛/새 빌드 A/B — 덤프 3종 값 동일·4화면 픽셀 동일, 자가 검증 62/20/27/10
ALL PASS(26.5+18.5), 벌크 1만 건 렌더 정상, 3종 빌드 그린, 카탈로그 무변경.
whats-new-1.5 3언어에 성능 개선 줄 추가.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- targetColor 건강 분기: 빈 값=시스템 분홍(다크 적응), 지정 시 hex — 단일 지점이라 목표 탭·모음·일기·위젯·워치 자동 반영
- 편집기 건강 섹션 '다짐 색'(프리셋 12+피커), 저장 시 기본색은 ''로·행동/꼬리표 전환 시 '' 정규화
- 타임테이블 블록 색과 별개, 시드 걸음 다짐에 #3E7CB1(대비 렌더 검증+스키마 내보내기 트리거)
- QA: 일기 목표 카드에서 걸음=파랑·나머지=분홍 대비 실측, 편집기 렌더, 61건 ALL PASS, 3종 빌드 그린, l10n 0/0
- ⚠️ CloudKit 스키마 추가 — 콘솔 Deploy가 빌드 7 설치보다 선행 필수(CLAUDE.md·plan §12 후속 3)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- 원인: 일기 버블 추가로 이웃 간격 ~9.6pt < 판정 18pt → 정지 상태에서도 이웃끼리 액체 합체가 걸려 원이 늘어남(7개 시절 ~20.7pt는 판정 밖 — '1.3까진 정상' 증언과 일치)
- 펼침 상태 정원 분리 시각 QA 확인, FAB 피어남 모핑은 겹침 구간이라 유지
- 마케팅 06-bubble ko/en/ja 재촬영(구 샷에 왜곡 포함)·합성 재생성, 코드 주석에 탭 추가 시 재확인 경고
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- fix: 더보기 탭 일기 달력 날짜 탭 무반응 — morePath [AppTab]→NavigationPath(Date 푸시 가능), 회귀 인자 -morePushDiaryToday(착지 실측)
- fix: 수면 블록이 수면 단계별로 칸칸이 갈라짐 — 10분 이하 깸 병합(sleepDisplayMergeGap, 표시 전용·값 무영향)
- feat: 기록 탭 타임테이블(하루·주간)에 수면·운동 블록 — 단일 공급 지점·숨김 토글 공유, 내보내기 injectingHealthBlocks(forDayKeys:)+trim 확장
- feat: 타임테이블 표시 색 설정(설정→건강 데이터 — 기본 인디고·주황, 전 타임테이블·내보내기 공통), -healthColorPreview
- QA: 주간 6일 블록 렌더·커스텀 색 픽셀 검증(#FF2D55→(255,221,228))·색 설정 화면·Date 푸시 착지, l10n 0/0, Debug/Store 그린
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- HealthKit 엔타이틀먼트 보유 시 읽기 전용이어도 '쓰기' 사유 키를 업로드 검증이 요구(실측)
- Info.plist에 정직한 읽기 전용 안내 문구 + InfoPlist.xcstrings 3언어
- 전달된 빌드 번호 재사용 불가 → CURRENT_PROJECT_VERSION 2
- Debug/Store 빌드 성공, 산출물 Info.plist에 키 포함 확인
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- 마케팅 심 3대 재생성(6.9" 아이폰·13" 아이패드·비페어링 워치, Auckland TZ)
- 아이폰 10·아이패드 10·워치 1 × ko/en/ja 재촬영(09-records→09-health 교체,
건강 타일 히어로), frame_screenshots로 합성 63장 재생성
- 촬영 실측 주의 3건(스크린샷 미덮어쓰기·워치 컨테이너 재조회·삭제 전파 지연) README 기록
- 시드 플로우 팝업 억제(markShown)·-mainSectionOrder 표시 오버라이드 추가
- CLAUDE.md 상태 셀 1.5 개발 완료 현행화(§6.1/6.4/6.8/11/14 반영), plan 전 섹션 완료 표기
- 최종 게이트: Store 빌드, 자가 검증 61·20·27·10 ALL PASS(26.5+18.5)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- WhatsNewView(버전당 1회·신규 설치 시드·온보딩 우선·全기기 업데이트 안내·-showWhatsNew)
- HelpView: 전 주제 ko 자연화(오타 '남긴 하지만'·번역투·'완료 보관함'→'완료된 목표' 정정,
1.1 맥 일기 반영), 신규 주제 3개(행동 컴플리케이션·건강 보기·건강 다짐), 건강 그룹은
지원 기기에서만 노출
- l10n: 4개 카탈로그 sync·en/ja 신규 208건+본문 재번역·용어 통일(Action/アクション·
Quest/クエスト·Home/ホーム)·stale 43 청소 → 전 카탈로그 missing/stale 0,
InfoPlist에 NSHealthShareUsageDescription 3언어
- 검증: Debug/Store/워치 빌드, 자가 검증 61·20·27·10 ALL PASS, ja 도움말 실렌더 확인
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- HealthMetric 8종(표준 단위·표기) + HealthStore(HK 조회: 누적 통계·스탠드·마음챙김·
수면 구간[합집합 병합, 깨어난 날 귀속 — plan §3.4 규칙]) + HealthCache(App Group,
지표×dayKey, 400일 보존 — 5.1.3 준수: CloudKit 비저장)
- 모음 탭 건강 섹션(타일 줄+접기·연결 CTA[명시적 탭 권한]·안내 시트[사용자 요구 가이드]·
지표 선택 시트[체크+드래그 순서]) — actionGrid·레이아웃 금지구역 무접촉, 편집 모드 숨김
- 3섹션(즐겨찾기·나머지·건강) 순서 렌더러 + 설정 탭 표시 토글·순서 화면(기기 로컬)
- HealthKit 엔타이틀먼트(iOS 앱만)·NSHealthShareUsageDescription, 전체 초기화에
건강 키·캐시 청소 추가
- 검증: Debug/Store 빌드, 자가 검증 106건 ALL PASS(26.5+18.5), 시각 QA 7장
(타일·순서·설정·안내·지표·CTA·18.5 빈 상태). 신규 인자 3종 §14 기록
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- WatchActionPeriod(하루/이번 주/이번 달/지난 7일/지난 30일) + WatchActionInfo에
optional 기간 필드 3종(구버전 캐시 호환 — isFavorite 패턴)
- LocalPrefs.watchActions(uuid→기간 맵, 기기 로컬) + 전체 초기화 청소 목록 반영
- makeSnapshot: 옵트인 행동만 기간값 계산(rollingRange 재사용, StatSpan 무변경)
- 신규 ActionValueComplication(4패밀리·측정 중 노랑+타이머·유령 타이머 안전장치·
빈 상태 안내·recommendations verbatim·widgetURL 딥링크)
- 워치 미니 행동 화면(WatchActionDetailView) + NavigationPath 딥링크 착지
(뒤로가기 한 번에 메인 복귀), 행동 편집기 애플워치 섹션(토글+기간)
- 검증 인자: -watchActions <N>·-actionShowEditor·-watchOpenActionDetail
- 검증: Debug/Store/워치(26.2·11.5) 빌드, 자가 검증 49·20·27·10 ALL PASS(26.5+18.5 심),
시각 QA 5장. 신규 문구 l10n은 계획 §10 R6대로 도움말 단계에서 일괄
- CLAUDE.md: 시뮬레이터 세트 리셋 반영(신규 UUID)·검증 인자 추가
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
- 그룹=목표, 행=다짐(대상 아이콘·이름 + 주기 scheduleLabel[마감 시각 포함] + 목표량·방향 '3회 이상 달성'/'1시간 이하 유지')
- 페이지 분할은 목표 그룹 단위(한 목표의 다짐이 페이지에 찢어지지 않음)
- 신규 키 '목표별 다짐' en/ja 완역, 나머지는 기존 키 재사용 — 카탈로그 missing/stale 0 유지
- 벌크 1만 건(4페이지 스티치 1290×11042)·소량(iPad) 실물 검사 통과, Debug/Store 빌드 성공
- 검증 중 'Documents 산출물 0개' 소동은 macOS NFD 파일명 대 grep NFC 불일치 착시로 판명 — 코드 무결
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
- 내보내기 완료 화면(공유·다시 만들기 아래)에 '내보낸 날짜의 일기 삭제…' — 확인 다이얼로그, iCloud 전 기기 삭제·양식 보존 안내, 열람 전용 숨김
- 별도 Section 조건부 삽입은 시트 표시 중 렌더되지 않아 기존 섹션 분기 안 배치로 확정
- PDF/스티치 PNG 렌더 코어를 DiaryExportRenderer로 추출 — 데이터 정리·초기화 백업이 재사용 (동작·규칙 불변, PDF 산출 회귀 확인)
- -diaryExportDeleteTest E2E: 내보내기→삭제→재실행 후 달력 마커 소멸 확인
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
- 기존 동작 검증: 전량 내보내기(무필터)였음을 확인 후 '전체(기본)/직접 지정' 세그먼트 추가
- 세션은 구간 겹침 포함(기록 탭 범위 문법), 구간 파일명 접미 -yyyyMMdd-yyyyMMdd
- 행동·목표·다짐 목록은 항상 전체(가져오기 연결·백업 온전성) — footer로 안내
- CSV 생성 코어 CSVExport 신설: 데이터 정리·초기화(예정)의 삭제 전 백업이 재사용
- -dataExportRangeDays 검증 인자, 전체(2031·8044건)↔최근 7일(4·1건) 실파일 대조 확인
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
- 통계 탭: 주간/월간 세그먼트 아래 '지난 7일/30일 단위로 보기' 토글(기기 로컬 stats.rollingWindow)
- StatSpan enum 불변(다짐 진행률 공유) — statsRange 헬퍼·rolling 플래그로 통계 표면만 처리
- 비교 카드 '이전 7일/30일과 비교', 화살표 7/30일 점프, 롤링 월간은 주차별 카드·주 평균 열 제외
- 위젯 ⑤: StatsChartSpan에 last7/last30 추가(소형은 last30→last7 강등), DayMath.rollingRange 공유
- 통계 내보내기: rolling 반영(제목·기간·합계 문구·last7/last30 슬러그)
- -statRolling 검증 인자, 주간·월간 롤링 화면 시뮬 확인
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
- 획 종료 시 최신 PKDrawing만 보관, 1.2초 조용하면 백그라운드 직렬화 후 1회 저장 (세대 가드로 역전 방지)
- 플러시: 비활성 전환(페이지 이탈·배치 모드·그리기 끔)·dismantleUIView·willResignActive — 유실 창 최대 1.2초
- CloudKit 트래픽도 획당 1회→묶음 1회로 감소
- -diaryStrokeTest 검증 인자: 프로그램 획 → 배달 확인(strokes=3, delivered 정상) + 재실행 복원 스크린샷 확인
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
1.3 기능 검토(2026-08-03)에서 나온 4건의 후속 수정:
- 인라인 텍스트 편집 종료를 onChange(of: inlineEditingTextID)의 finalize
단일 지점으로 통합 — 다른 요소를 선택하거나 편집 중 상자를 삭제해도
편집 상태가 남지 않는다 (기존엔 빈 곳 탭·키보드 내림만 정리됐음)
- 내용이 빈 텍스트 상자는 편집 종료 시 자동 삭제 — '텍스트' 플레이스홀더가
PDF·이미지 내보내기에 인쇄되는 것 방지. '스타일' 시트로 넘어가는 중이면
유지(꾸민 뒤 쓰는 흐름 보존)
- 선·화살표 핀치 커밋 상한을 끝점 드래그와 같은 1.6으로 — 길게 늘린 선이
핀치 순간 0.95로 잘려 짧아지던 경계값 불일치 해소
- 키보드 가림(검토 2번)은 소프트 키보드 실측 결과 줌 컨테이너의 fit
재계산이 이미 자동 처리(페이지 전체 축소) — 코드 변경 불필요 확인
마케팅 스크린샷(ipad 04-diary-note 등)은 기본 스타일 요소만 담겨 1.3
렌더와 픽셀 동일 — 재촬영 불필요 확인.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
실사용 보고: 도형이 고정 비율 손잡이 하나뿐이라 모양을 다듬을 수 없고,
텍스트는 시트에 입력하는 방식이 일반 노트 앱과 동떨어져 있었다.
- 종류별 모양 손잡이 (드래그는 페이지 좌표계로 받아 실시간 회전에도 안정):
· 사각형: 꼭짓점 4개 — 끈 모서리만 움직이고 반대편 고정
· 원: 상하좌우 4개 — 늘리고 눌러 타원 만들기
· 선·화살표: 양 끝점 — 반대 끝 고정한 채 길이+방향 동시 조절
· 사진·텍스트: 우하단 1개 (사진은 원본 비율 유지)
- 정사각형·정원 스냅: |가로-세로| ≤ 10pt면 딱 맞추고 손잡이·테두리
노란색 강조 + 햅틱. 핀치는 모양 비율 그대로 균등 스케일
- 텍스트 상자 제자리 입력: 선택된 상자를 탭하면 그 자리에서 키보드
입력·줄바꿈 (생성 직후에도 바로 입력). '글 수정' 시트는 '스타일'
시트로 재편 — 테두리 켬/끔 + 독립 테두리 색(borderColorHex,
빈 값 = 글자 색) + 굵기
- borderColorHex 필드 추가 (기본값 — CloudKit·구버전 안전)
- 검증 인자 -diaryTextEdit 추가, 도움말 갱신 + en/ja 번역
- 검증: Debug/Store 빌드, 아이패드 심 손잡이 배치·회전 정합·제자리
편집 렌더 확인, 카탈로그 missing·stale 0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
"정해진 모양·크기 그대로만 나온다"는 실사용 보고: 핀치(균등 스케일)만 있어
가로세로 비율·회전·색·굵기를 바꿀 수 없었고 맥(마우스)은 크기 조절 수단 자체가
없었다. 일반 노트 앱 수준의 기본 편집을 채워 넣는다.
- DiaryPageItem 스타일 필드 8개 추가 (전부 기본값 — CloudKit·구버전 데이터 안전):
heightRatio(자유 비율)·lineWidth·filled·cornerRadius·fontSize·textBold·
textAlignRaw·textBorder. 0/음수/빈 값 = 기존 하드코딩과 동일한 룩
- 선택 시 오른쪽 아래 크기 손잡이: 도형·텍스트는 가로세로 따로, 사진은 원본
비율 균등. rotationEffect 안쪽 overlay라 회전 상태에서도 로컬 좌표로 정확
- 두 손가락 돌리기 회전 제스처 + 시트의 회전 슬라이더(마우스·정밀 대체)
- '도형 수정' 시트: 색·선 굵기·채우기(사각/원)·모서리 둥글기(사각)·회전
- '글 수정' 시트 확장: 글자 크기·굵게·정렬(왼쪽/가운데/오른쪽)·테두리(+굵기)·회전
- 내보내기는 DiaryItemView 재사용이라 자동 일치, 시드가 새 필드 전부 렌더
- 검증 인자 -diaryShapeEdit 추가, 도움말 갱신 + en/ja 번역
- 검증: Debug/Store 빌드, 아이패드 심 ko/en/ja 시트 렌더, 기존 스토어 위
경량 마이그레이션(덮어 설치) 정상
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
PencilKit은 획 색을 화면 모드에 맞춰 자동 반전하는데, 양식(PDF·사진)은 항상
밝은 배경이라 다크 모드 아이패드에서 쓴 획이 라이트 모드 맥의 흰 양식 위에서
흰색으로 반전돼 보이지 않았다(동기화 문제로 오인된 실사용 보고).
- 양식 페이지는 캔버스 overrideUserInterfaceStyle + PKToolPicker
colorUserInterfaceStyle을 .light로 고정 (해석·렌더를 같은 기준으로 묶는 WYSIWYG)
- 양식 없는 페이지는 기존 동적 반전 유지 (다크 배경 종이에선 그게 맞음)
- 내보내기 PKDrawing.image도 라이트 트레잇 고정 — 호출 시점 트레잇 의존이라
다크에서 내보내면 획이 반전 렌더될 수 있던 잠재 결함 제거
- 도움말 '나만의 양식(속지)' 문구 갱신 + en/ja 번역
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NNxA172hNDRpDsJ2qztKPf
- 주간/월간 '이상 달성' 다짐이 현재 주기 몫을 채우면 하루 게이지가 0% 대신
완료 상태(게이지 가득+초록 ✓+문구)로 표시 — 목표 탭 행·모음 카드·위젯 ②(체크)·
③(문구)·④(링 가득)·시리 하루 응답 공유
- 목표 하루 평균(combinedSpanRatio)에도 해당 다짐을 1.0으로 반영 —
위젯 ② 목표 바·워치 목표 게이지·시리 목표 응답·일기 헤더 자동 반영
- 판정은 QuestProgress.isPeriodFulfilled 단일 지점 — 기준일의 논리적 하루 끝
클리핑으로 일기 과거 날짜 소급 차단. spanProgress 수치·판정(judgment)·연속(streak)
불변(표시 계층 전용). 하루 다짐·특정 기간·atMost는 비대상, 잠금화면·워치
컴플리케이션은 공간 제약으로 수치 유지
- 도움말 '진행률 읽는 법' 문구 갱신, l10n en/ja 완료(전 카탈로그 stale 0·missing 0)
- 검증: -progressSelfTest 37→49건 ALL PASS(기존 37건 수치 무변경), 신규
-seedPeriodFulfilled 시드로 ko/en/ja·위젯 실렌더 확인, 시리 스모크 10건 OK,
Debug/Store 빌드 성공(워치 타깃은 Shared 미포함·무변경)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVeduv1eNdXjk1ay4tSgBg
- Haru_Danim.entitlements → IOS/, Haru_DanimWidgets.entitlements → Widgets/,
Haru_DanimWatchWidgetsExtension.entitlements → Haru_DanimWatchWidgets/
(워치 앱은 원래 자기 폴더 안 — 그 전례대로 동기화 그룹에 두되 예외 등록 불필요)
- pbxproj: CODE_SIGN_ENTITLEMENTS 경로 갱신 + 루트 그룹의 개별 파일 참조 제거
- 검증: iOS Debug·Store·워치 3스킴 빌드 성공, Entitlements-Simulated에 전체 키
(App Group·CloudKit·시리·푸시·keychain·iCloud KVS) 정상 반영, 번들 오염 없음, 앱 기동 확인
- CLAUDE.md §2.1 구조에 위치·삭제 금지 명시
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVeduv1eNdXjk1ay4tSgBg
- 검사가 종료 실행 기기 기준이라 기기별 값이면 교차 사용(아이패드 시작→아이폰 종료)에서
결과가 갈리던 문제 해소 — 값 자체를 모든 기기에서 통일
- SettingsCloudSync: 시작 시 iCloud 값 채택(없으면 로컬 값 시드), 외부 변경·포그라운드 복귀 때
pull, 설정 변경 때 push(동일 값 가드). App Group 저장은 유지(위젯·인텐트 읽기 경로 무변경),
CloudKit 스키마·프리미엄 토글과 무관 — ubiquity-kvstore 엔타이틀먼트만 추가
- 설정: 측정 섹션을 나눠 '짧은 기록 무시' 바로 밑에 전 기기 공통 안내 푸터,
'장시간 측정 알림'은 기기별 유지 명시. 도움말도 갱신, en/ja 번역(missing 0·stale 0, 실렌더 확인)
- whats-new-1.1 3개 언어에 항목 추가, CLAUDE.md §6.8 갱신
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVeduv1eNdXjk1ay4tSgBg
- 달력 툴바 '기본 표시 설정'(DiaryDefaultsSheet): 캘린더 일정 기본 모드(표시 안 함/모든 캘린더/
선택한 캘린더만) + 목표·행동 기본 숨김 토글. 기기 로컬 standard(diary.default*) 저장
- 날짜별 재정의: 기존 동기화 배열에 마커(#override)만 추가 — 스키마 무변경, 구버전(1.0/1.1)은
마커를 무시해 표시 동일, 1.1 이전 날짜별 선택(마커 없는 목록)은 재정의로 계속 존중
- 기본값은 소급 적용(재정의 없는 모든 날짜가 현재 기본값을 따름), 각 필터 시트에
'기본값으로 되돌리기' 추가. 행동 필터 onChange는 효과값과 같으면 저장 안 함(기본값 굳음 방지)
- 효과 계산 단일 지점(DiaryDefaults.effective*)을 화면·PDF/이미지 내보내기·캘린더 블록이 공유 —
기본값 날짜·재정의 날짜 모두 화면=내보내기 일치(내보내기 실검증 완료)
- 검증: 요약 카드 목표 숨김 배지·타임테이블 행동 숨김·캘린더 '모든 캘린더' 자동 표시(점선)·
목표 필터 효과 반영 스크린샷 + 이미지 내보내기 왕복 + 자가 테스트 회귀 ALL PASS
- 도움말(일정·필터 주제) 확장 + en/ja 14키 번역(missing 0, ja 실렌더 확인), CLAUDE.md §6.7·§14
- DEBUG: -diaryShowDefaults(시트), -diaryDefaultsSeed(기본값 주입 검증)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVeduv1eNdXjk1ay4tSgBg
맥 일기 (§6.7):
- 사이드바에 일기 탭 개방 (AppTab.sidebarCases 맥 필터 제거)
- 맥 노트 도구줄: 텍스트 우선 가로 스크롤 + '그리기' 토글(마우스·트랙패드 필기, drawingPolicy anyInput)
- 그리기↔배치 상호 배타, 일기 잠금 설정 맥 노출 — 아이패드 경로는 코드 불변(회귀 차단)
CSV 가져오기 (§6.8·프리미엄):
- IOS/Core/CSVImport.swift: RFC4180 파서·데이터 행 모양 판별(언어 무관)·계획/반영 분리·초 단위 멱등 중복 처리
- 행동 연결: uuid 우선 → 이름+방식 폴백 → 새로 생성(uuid 보존), '측정 중' 행 제외, 추가 전용
- DataImportView: 파일 선택(복수) → 미리 보기 → 확인 → 저장 1회. 무료 한도 우회 방지 위해 프리미엄 게이트
- 자가 테스트 -csvImportTest 20건 ALL PASS, 진행률 자가 테스트 회귀 ALL PASS
문서·현지화·버전:
- 도움말(일기 맥·CSV 복원)·프리미엄 기능 행·설정 문구 갱신, en/ja 42키 번역·stale 10키 정리 (missing 0)
- CLAUDE.md §1/§6/§6.7/§6.8/§8/§14, Marketing 설명 ko/en/ja·whats-new-1.1, MARKETING_VERSION 1.1(4타깃)
스크린샷 전면 재제작 (ko/en/ja):
- 아이폰 10장·아이패드 10장(신규: 기록 목록/주간 타임테이블/일기 양식/다크/목표)·워치 합성 1장
- 시간대 정합: SIMCTL_CHILD_TZ 부팅 주입(Asia/Bangkok) + -marketingTZ 프로브 검증 절차 확립(README)
- frame_screenshots.swift: 문구 5종 추가·일기/동기화 문구 맥 반영·renderWatch 합성 추가 (총 63장)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVeduv1eNdXjk1ay4tSgBg
- 아이폰 추가 4장: 05 위젯 모아 보기(실렌더) / 06 글래스 버블 메뉴 / 07 iCloud 동기화(합성) / 08 다크 모드
- 아이패드 추가 3장: 05 주간 타임테이블(벌크 시드로 꽉 찬 지난주) / 06 위젯 모아 보기 / 07 iCloud 동기화(합성)
- DEBUG 전용 촬영 도구: -widgetPreview marketing(위젯 실렌더 판), -historyDaysAgo(과거 주 표시) — 출시 빌드 무영향
- frame_screenshots.swift: 신규 문구 5종 + renderSync(아이폰·아이패드 01-main 듀오 합성, 동기화 배지)
- 촬영 시각 정합: SIMCTL_CHILD_TZ로 앱 내 시각을 상태바 9:41대에 맞춤 (README에 절차 기록)
- 다음 버전 제출 때 ASC 각 언어 스크린샷 란에 추가 업로드 필요 (README 체크리스트에 명시)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVeduv1eNdXjk1ay4tSgBg
- .toolbar { if PremiumManager.shared.isPremium } 조건은 @Observable 변경 시
재평가가 보장되지 않아, 실행 중 프리미엄 전환(설정 테스트 토글·구매) 후
버튼이 앱 재시작 전까지 나타나지 않는 실기기 결함 (아이폰·아이패드·맥 공통)
- ToolbarItem은 무조건 두고 RefreshButton body에서 판정 — View body는
관찰 추적이 확실 (같은 body의 isRefreshing 전환이 검증된 패턴)
- 검증: Debug·Store 빌드, 무료(버튼 없음)/프리미엄(버튼 표시) 아이폰·아이패드 캡처
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
새로고침의 쓰임새(iCloud 동기화 반영·위젯/워치 갱신)가 전부 프리미엄
기능이라 무료 사용자에겐 누를 이유가 없는 버튼 — 모음 탭 툴바에서
프리미엄일 때만 표시한다(실사용 피드백 2026-07-23).
- 도움말 '새로고침 버튼' 항목이 모음 탭 그룹에 2개 중복돼 있던 것을
하나로 합치고, 프리미엄에서만 표시된다는 문구 추가
- 신규 문구 en/ja 완역, 구 문구 stale 2건 정리 (missing/stale 0)
- CLAUDE.md §6.1 툴바 규칙 갱신
- 검증: Debug/Store 빌드, 무료(-premium NO) 버튼 숨김·프리미엄 표시
스크린샷
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 사용성 감사(A그룹 5건 + 지시 추가분)를 한 번에 반영.
[테마] '시스템 설정 따름' 추가 + 기본값 light→system. "system"은 스킴을
강제하지 않아(preferredColorScheme nil) 앱·위젯('앱 일치' 옵션,
WidgetThemeOption.scheme: ColorScheme?)·DEBUG 위젯 미리보기까지
시스템 라이트/다크를 그대로 따른다
[온보딩] 첫 실행 3장 소개(OnboardingView — 행동→목표·다짐→정리).
데이터가 하나도 없고 본 적 없을 때만 1회(건너뛰기 포함 재표시 없음,
onboarding.done), 시드·마케팅 촬영 플로우는 자동 건너뜀.
설정 → 지원 '앱 소개 다시 보기'로 재열람
[일기 잠금] 설정 → 일기(iPad 전용 표시) 토글 — DiaryLock이
.deviceOwnerAuthentication으로 Face ID/Touch ID/Optic ID+암호 폴백을
기기별 분기 없이 처리. 일기 탭 진입 게이트(DiaryLockGateView),
백그라운드 재잠금, 토글 변경 시 인증 요구, 잠글 수단 없는 기기는
통과(영구 잠김 방지). NSFaceIDUsageDescription 추가(Info.plist+
InfoPlist.xcstrings ko/en/ja)
[통계] 이전 기간 비교 카드(맨 위) — 총 시간·횟수를 어제/지난주/지난달과
비교(▲▼%, 이전 기록 없으면 상태 문구). 이전 기간은 관계 기반
Aggregator로 직접 집계, 필터 반영. 화면 전용(내보내기 미포함 의도)
[스플래시] 1.2→0.7초 단축 (하루에도 여러 번 여는 앱)
[워치] 행동 실행 탭 시 WKInterfaceDevice.play(.click) 햅틱 — 화면을
안 보고 탭해도 접수 확인
[컴플리케이션] rectangular 빈 상태에 해결 안내("목표 편집에서
'애플워치에서 보기'를 켜면 나타나요") — 옵트인 발견성 보완
[문구] 행동 편집기 꼬리표 색 규칙(여러 개면 가장 먼저 만든 꼬리표),
새로고침 버튼 accessibilityHint
- 도움말 3주제 추가(새로고침 버튼·일기 잠금·이전 기간과 비교)
- 신규 문구 31키 en/ja 완역 + 워치 카탈로그 2키, missing/stale 0
- CLAUDE.md §6·§6.6·§6.7·§6.8·§10·§11·§14 갱신, DEBUG 인자
-showOnboarding·-diaryLockScreen 추가
- 검증: Debug/워치/Store 빌드, 온보딩·설정·비교 카드·잠금 게이트·
컴플리케이션 스크린샷
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
첫 출시 전 반영 요청된 사용성 개선 — 둘 다 표시 계층·기기 로컬 설정만
건드리는 안전 범주.
① 잠금화면 위젯 다짐 점: '아래에서 차오르는 물높이' 채움은 5~6pt에서
90%↔100% 차이(위쪽 1px)가 배경에 따라 사실상 안 보임 —
**미완료 = 링(호) 진행(시작 최소 10%, 완료 직전에도 틈이 보이게
최대 88%까지만 감김) / 완료 = 꽉 찬 원반**으로 교체. 링 끝의 틈은
둘레에 생겨 눈에 띄고, 완료는 면적(빈 링 vs 원반) 자체가 달라
어떤 배경에서도 구분된다. ratio 그대로라 '이하 유지'는
한도 안=원반/초과=빈 트랙으로 의미 유지 (§10 문서화)
② 즐겨찾기 순서 변경: 행동 탭 ⋯ 메뉴에 '즐겨찾기 순서 변경' 시트
추가(2개 이상일 때, 꼬리표 순서 시트와 동일 패턴 — 닫힐 때 1회
커밋). LocalPrefs.reorderFavorites는 전역 배치에서 즐겨찾기가
차지한 자리들만 재배열해 나머지 행동·위젯 기본 슬롯 무영향.
모음 탭 즐겨찾기 섹션·애플워치 즐겨찾기가 같은 순서를 읽으므로
세 표면이 자동 일관 (§6.2·§6.1·§11 문서화).
move(fromOffsets:)는 SwiftUI 확장이라 Foundation 계층에 동일
의미로 직접 구현
- 도움말 '즐겨찾기 모아 보기' 본문에 순서 변경 경로·워치 적용 추가
- 신규 문구 4키 en/ja 완역, 옛 본문 stale 정리 (missing/stale 0)
- §14에 -actionShowFavoriteOrder 검증 인자 추가
- 검증: Debug/Store 빌드, 잠금 위젯 프리뷰·순서 시트 스크린샷
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1차(c18e3c7)에 이어 나머지 전 영역을 세션 본체가 직접 정독 완료:
위젯 10파일·인텐트, 앱 셸(ContentView/Settings/Help/Radial/SymbolCatalog),
워치 전체(페이로드·동기화·앱·컴플리케이션), 일기 전체(6파일 ~4.2k줄),
내보내기 뷰부·CSV, MainView·ActionViews 잔여 — 추가 결함 1건만 발견.
[L] 모음 탭 횟수 셀: 큰 숫자와 단위("회")를 분리 렌더링하는 유일한
지점이라 en에서 1일 때 "1 times"가 됨 — Format.countUnit(단복수
분기, 명시 키 count.unit.one/other)로 수정. 단독 "회" 키는 사용처
소멸로 정리 (ja 「回」는 단복수 무관)
문서(CLAUDE.md): 이번 리뷰로 확정된 동작 규칙 4건을 명세에 반영 —
세션 편집 원본 초 보존·0길이 차단(§6.5), 타임테이블 HH:mm 라벨(§6.5),
필터 활성 실재 행동 기준(§6.5), 통계 동명 구분 Format.disambiguated(§6.6)
정독 제외(사유 명시): DebugSeed·WidgetPreviewScreen·ComplicationPreview
(DEBUG 전용), 워치 엔트리 2파일(41줄), HelpView 본문 문구부(카탈로그
검증으로 커버), ExportImageView PhotoSaver(~40줄)
검증: Debug/Store 빌드, 카탈로그 missing/stale 0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
'처음 보는 리뷰어' 관점 전체 검증(핵심 계산·데이터 계층·기록/통계 완료,
나머지 영역 진행 중)에서 확인된 결함 수정. 핵심 계산부(DayMath·
QuestProgress·Models)는 발견 0건.
[M] DataStore: 스토어 손상 백업 복구 직후 legacy 이관 가드(타깃 없음)가
다시 열려 구 샌드박스 스토어(영구 잔존)가 부활 — 수개월 전 데이터로
조용한 롤백. App Group 플래그(migration.legacyStoreImported)로 평생
1회 보장 (§5.1 문서화)
[M] 통계 시리즈가 행동/꼬리표 이름 키 — 동명 2개면 차트가 한 선으로 합쳐
지고 Identifiable id 충돌, 동명 꼬리표는 합산. Format.disambiguated
(이름 (2) 형식)로 통계 탭·통계 내보내기·⑤ 위젯 3표면 통일, 꼬리표
집계는 identity 키로 재작성 (수치는 기존과 동일, 표시·범례만 구분)
[L] SessionAlertManager: 시작→즉시 종료 연타 시 조회(await)~추가 사이
경합으로 종료된 세션의 장시간 알림이 잔존 — 세대 카운터로 마지막
호출만 확정
[L] 세션 편집기: 분 절사 값을 무조건 덮어써 1분 미만 세션이 메모만
고쳐도 0초로 파괴, 시작=종료 0길이 기록은 저장돼도 어디에도 안 보임
— 안 움직인 필드는 원본 시각(초) 보존 + 0길이 저장 차단(문구 갱신)
[L] 타임테이블 시간축: 하루 시작이 정시가 아니면(06:30) 라벨이 시만
표기해 최대 59분 어긋남 — 분 성분 포함(HH:mm), 화면·내보내기 동일
[L] 기록·통계 필터: 제외했던 행동을 삭제하면 잔존 ID로 칩·내보내기
필터 문구가 허위 활성 — 실재 행동 기준으로 판정
[L] 목표 편집: 시작일을 종료일 뒤로 옮기면 종료<시작 저장 가능(DatePicker
in: 은 표시 제약만) — 저장 시 정규화
+ QuestEditor·TagViews·GoalViews·인텐트·WidgetSupport 정독 — 추가 발견 없음
+ §15-11 서브 에이전트 금지 명문화 (사용자 지시)
검증: Debug/Store 빌드, 카탈로그 missing/stale 0 (새 문구 2키 en/ja)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
즐겨찾기 v2(e09a0b7) 후속 실사용 피드백 세 가지 반영:
①즐겨찾기 안에서 순서 바꾸기가 어렵다 ②새로 지정하면 꼬리표(전역)
순서에 끼어들어 예측이 안 된다 ③배치 편집이 즐겨찾기가 없다는 듯
통짜 그리드로 떠서 디테일이 떨어진다.
- 배치 편집도 즐겨찾기/나머지 섹션 구조 그대로(항상 펼침): 섹션 안
드래그는 실시간 순서 변경, **섹션 사이 드래그는 드롭 확정 시점에
즐겨찾기 지정·해제 + 그 위치로 이동**(commitDrop). 호버 중 교차
이동은 자기 섹션 안 점프로 보여 moveDragging이 무시
- 빈 섹션은 점선 드롭 존(호버 하이라이트)이 받는다 — 즐겨찾기 0개
상태에서도 끌어서 지정 가능, 전부 즐겨찾기면 해제 존 표시
- **새 즐겨찾기는 배치 순서상 블록 끝으로**(LocalPrefs.placeNewFavoriteAtEnd
— 롱프레스 메뉴·행동 탭 스와이프·상세 토글 3경로 공통). 해제는
위치 무이동(나머지 상단 근처에 남음), 첫 즐겨찾기도 무이동
- 도움말 본문에 순서 규칙·끌어서 지정 사용법 반영, en/ja 번역 +
stale 1키 정리 (드롭 존 문구 2키 포함 missing/stale 0)
- 검증: Debug/Store 빌드, 아이폰·아이패드 편집 모드 + 브라우즈
스크린샷 (isFavorite는 모델 필드라 DataChange.commit 경유 유지)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
즐겨찾기 빠른 실행 줄(7d17917)이 그리드와 셀 크기·배경이 달라 '따로
노는 느낌'이고 같은 행동이 두 번 보인다는 실사용 피드백 반영. 도입
의도(행동이 많아져도 자주 쓰는 것만 모아 보기)는 유지하고 형태만 교체.
- 즐겨찾기를 별도 카드가 아니라 그리드의 첫 섹션으로: 통짜 그리드와
같은 actionGrid(_:) 빌더를 공유해 셀 크기·열 규칙·맥 폭 보정이 항상
동일(v1의 컴팩트 셀·맥 특례 폭 제거). 중복 노출도 사라짐
- '나머지 행동 · N개' 섹션은 헤더 탭으로 접기/펼치기(기기별
local.mainOthersCollapsed, 기본 펼침, 셰브론 회전) — 행동이 많아도
접으면 즐겨찾기만 남는다. 숨기는 행동은 없음(위치만 승격, 그리드
완전 숨김 방식 기각은 유지)
- 편집(배치) 중에는 기존처럼 통짜 그리드(배치 순서는 하나뿐)
- 시드 즐겨찾기 1→3개(독서·달리기·물 마시기), -mainOthersCollapsed
DEBUG 인자 추가(접힘 표시 강제 — 표시 전용, 실 설정 무변경)
- 도움말 '즐겨찾기 모아 보기'로 개편 + en/ja 번역, stale 2키 정리
- 검증: Debug/Store 빌드, 아이폰 기본·접힘·편집 + 아이패드 + 맥 강제
레이아웃 스크린샷 5종, 카탈로그 missing/stale 0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
모음 탭 즐겨찾기 빠른 실행 줄(7d17917)이 기존 스크린샷에 없어
아이폰 6.9"/아이패드 13" 01-main과 도움말 help-main을 ko/en/ja로
재촬영(상태바 9:41 오버라이드, 로케일별 재시드)하고 합성판 재생성
— 합성 도구는 결정적이라 02~04 합성판은 바이트 동일 무변경.
en 샷은 직전 l10n 수정('Favorites', 'Show 1 more quest')까지 반영.
문서:
- CLAUDE.md: 통신판매업 신고 완료(2026-07-22) 반영 — 서류 절차 종료,
ASC 등록 진행 가능. 재촬영·en 복수형 정리 이력 추가
- Marketing/README·subscription-info: 한국 전자상거래법 판매자 정보
(사업자등록번호·통신판매업 신고번호) 입력, IAP 심사용 스크린샷
캡처 순서(상품 등록 후 TestFlight에서), 첫 심사 시 IAP 3종 동반
제출 항목 보강
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
즐겨찾기 빠른 실행 셀(108pt 고정)이 맥(Designed for iPad) 축소 매핑
보정을 받지 않아 그리드 버튼(200~280pt)과 비례가 안 맞고, xLarge 글자
보정과 겹치면 긴 이름이 잘릴 여지가 있었다 — 최초 구현 때 맥 레이아웃
검증(-forceMacLayout)을 빠뜨린 것.
- 맥에서만 셀 폭 108→150pt (그리드 버튼 150→200과 같은 보정 비율)
- 아이폰·아이패드는 기존 108pt 그대로 (런타임 분기, 무영향)
- 맥 강제 레이아웃 스크린샷 검증 + progressSelfTest 37건 ALL PASS +
인텐트 스모크 10/10 + Debug/Store/워치 3스킴 빌드 + 9개 카탈로그
missing/stale 0 재확인
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014CkLDi8Lr21vGqo4SjZaTp
행동이 많아질수록 모음 탭이 복잡해진다는 실사용 피드백에 대한 1차 대응.
22개 시드로 iPhone·iPad·맥 4가지 레이아웃을 직접 시뮬레이션해 대안 A~F를
검토했고, 가장 저위험인 A(즐겨찾기 재사용)만 이번에 구현했다.
- Action.isFavorite(행동 탭과 동일 필드)를 켠 행동을 모음 탭 상단에
가로 스크롤 한 줄로 노출 (전체 그리드에서는 제외하지 않음 — 숨기는
방식은 검토 후 기각)
- 롱프레스 메뉴에 즐겨찾기 지정·해제 버튼 추가, 전체 그리드·즐겨찾기
줄이 메뉴 구성을 공유하도록 리팩터
- 도움말에 새 주제 추가 + 관련 en/ja 번역, CLAUDE.md §6.1 문서화
- 감사 겸 아이콘 전용 버튼 접근성 라벨 누락 3건 수정(일기 할 일 체크박스,
아이콘 선택기, 꼬리표 색 프리셋) — §15 컨벤션 위반이라 저위험 즉시 수정
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014CkLDi8Lr21vGqo4SjZaTp
- 사용자 Xcode 빌드가 카탈로그 2개를 자기 포맷으로 재직렬화 — JSON 파싱 비교로
내용 완전 동일 확인 (Localizable 786키 값·상태·manual 마킹 전부 보존)
- 유일한 실변화: InfoPlist의 CFBundleName extractionState(extracted_with_value) 제거
→ 수동 관리로 전환되어 앞으로 Xcode 추출이 현지화 값을 되돌리지 않음 (§2.3 방어와 동일 효과)
- 맥 앱 이름이 다시 Haru_Danim으로 보인 원인은 파일이 아니라 LaunchServices의
유령 등록(삭제된 옛 래퍼 사본 4건)이었음 — lsregister로 정리 완료, 살아 있는
래퍼·산출물에는 ko 하루 다님/en·ja Haru Danim 정상 확인
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014CkLDi8Lr21vGqo4SjZaTp