2026.04.24 작업일지 v1.0.0
새벽 05:25~06:37 KST 세션. 자동 /sync 양쪽 기기에서 끄기 + 포모도로 Play Console Closed Testing(alpha) 업로드. versionCode 셋을 태우고 6번째에 alpha 트랙 draft 커밋 성공.
오늘의 궤적
05:25 텔레그램 “추천작업” 한 줄로 시작. 먼저 Mac/WSL 양쪽 daily-sync-and-learn 자동 스케줄을 전부 끔 (/sync 수동 호출은 그대로 유지). 이어서 포모도로 Google Play Console Closed Testing(alpha) 업로드 완주 시도 — versionCode 3/4/5 를 태우고 6번째에 성공. 과정에서 “draft app 은 모든 트랙의 모든 릴리즈가 draft 여야 commit 통과” 라는 숨은 제약을 실측으로 확인, 새 lesson 한 장 추가.
자동 /sync 끄기
- 사유: 토큰 비용 추가 절감. 수동 호출만 남기기.
- Mac:
launchctl bootout+launchctl disable gui/<uid>/com.claude.daily-sync-and-learn - WSL (별도 Claude 세션):
systemctl --user stop + disable + mask daily-sync-and-learn.timer - 06:45 KST 자동 발화 → 양쪽 0
/sync수동 호출은 그대로 가능 (같은daily-sync-and-learn.py호출)- 메모리 갱신:
project_automation_disabled_2026_04_21.md+ MEMORY.md 인덱스 줄
포모도로 Closed Testing 업로드
전제 상태 확인
- keystore 이미 있음:
android/pomodoro-upload-keystore.jks(2026-04-21 생성, key.properties 동일 위치) build.gradle.ktsrelease signingConfig 세팅 완료 — keystoreProperties 로 key.properties 읽음- store-listing 자산 전부 준비됨 (
android/store-listing/text/ko-KR.md+graphics/4장) - 스크린샷 “리셋” 버튼 잘림 이슈는 어제 커밋
e8a6cf2에서 아이콘-only 60×60 로 재촬영됨 (screenshot-1/2 PNG 도 그 커밋에 포함)
AAB 빌드 (Xcode license 회피)
flutter build appbundle --release가You have not agreed to the Xcode license agreements에러로 block (Android 빌드인데도 Xcode 체크가 걸림)sudo xcodebuild -license accept는 interactive sudo 필요 → 회피- 회피:
DEVELOPER_DIR=/Library/Developer/CommandLineTools환경변수로 Flutter 가 Xcode 대신 CommandLineTools 를 보도록 유도 - Flutter 3.41.7 (fvm 경로
~/fvm/versions/3.41.7/bin/flutter) 사용. 빌드 타임 11~25초
Play Console API 업로드 시도 (4번)
| # | versionCode | track | status 요청 | 결과 | 원인 |
|---|---|---|---|---|---|
| 1 | 3 | beta | completed | ❌ 403 “Version code 3 has already been used” | vc=3 과거 시도에서 이미 소비 |
| 2 | 4 | beta | completed→draft(retry) | ❌ 400 tracks.update Precondition check failed | alpha/beta 트랙에 testers 그룹 없음 |
| (수동) | — | — | — | ✅ 대종님이 Play Console 웹에서 memoyo-beta-testers@googlegroups.com 을 alpha 트랙에 추가 | — |
| 3 | 5 | alpha | completed→draft(retry) | ❌ 400 edits.commit “Only releases with status draft may be created on draft app” | draft app 규칙 |
| 4 | 6 | alpha | draft (from start) | ❌ 동일 에러 | ??? |
숨은 blocker 발견
수동 파이썬으로 모든 트랙 순회한 결과, internal 트랙에 vc=3 status=completed 가 남아있음. 과거 업로드 시도 중 어느 시점에 internal 로 끼어든 상태. edits.commit 은 전체 트랙 상태를 validate → 하나의 non-draft 릴리즈가 있으면 draft app 은 reject. 기존 스크립트 auto-retry 로직은 target 트랙 하나만 draft 로 재시도해서 이 조합 케이스를 커버 못 함.
최종 성공 흐름 (수동 파이썬)
edit = service.edits().insert(...)
# 1. 새 aab 업로드
bundles.upload(vc=6) # OK
# 2. 기존 non-draft 릴리즈 demote
tracks.update(internal, vc=3, status=draft) # OK
# 3. 새 릴리즈를 target 트랙에 draft 로
tracks.update(alpha, vc=6, status=draft, releaseNotes) # OK
# 4. commit
edits.commit(edit_id) # OK
- edit_id:
04724584959853325210 - 실패한 edit id (discard 됨):
08231519479274434153,07488784411631080250
결과 (Play Console 현재 상태)
- alpha (Closed Testing): vc=6 draft ← 대종님이 원래 원한 위치
- internal: vc=3 draft (demoted)
- beta / production: 비어있음
- 다음 단계: Play Console 웹에서 필수 페이지(콘텐츠 등급·데이터 보안·타겟층·광고 선언·스토어 등록정보 ko-KR) 완성 → “검토를 위해 앱 전송” → Google 심사
새 lesson 기록
- 파일:
~/.claude/skills/submit-app/lessons/android-all-tracks-must-be-draft.md - 요점: draft app 은 모든 트랙 모든 릴리즈가 draft 여야 commit 통과. 기존
play-upload.pyauto-retry (status=draft) 는 단일 트랙만 다루기 때문에 조합 케이스 미커버. - 후속 TODO:
play-upload.py에--demote-existing옵션 추가 고려 (probe 단계에서 모든 트랙 스캔 → non-draft 자동 demote)
곁가지: 더치페이/약먹자 iOS “제출 준비 중” 질문
업로드 재시도 기다리는 동안 App Store Connect 앱 목록 스크린샷 날아옴 — “약먹자 - 복용 알림” + “더치페이 계산기” 가 iOS 1.0 “제출 준비 중” 상태로 걸려 있음. 2026-04-20 Mac 에서 앱 레코드 + 메타데이터 작성까지 진행된 뒤 포모도로/심사레이더/한줄일기로 우선순위 이동하면서 심사 제출 단계에서 멈춘 상태. todos 의 “드롭” 라인과 실제 상태 불일치. 오늘 세션에선 상태 확인만 하고 별도 세션으로 넘김.
관련 커밋
| repo | SHA | 메시지 | push? |
|---|---|---|---|
| pomodoro | ff7337b | chore: bump version to 1.0.0+6 + release notes | ❌ local only |
| claude-skills | 03a355c | docs(submit-app): add lesson android-all-tracks-must-be-draft | ✅ pushed |
남은 작업
- pomodoro repo push (현재 local 커밋만)
- Play Console 웹에서 필수 페이지 완성 후 검토 제출
- 더치페이/약먹자 iOS “제출 준비 중” 상태 해소 (별도 세션)
play-upload.py--demote-existing옵션 추가 (lesson 후속)