2026.04.29 작업일지 v1.0.0
Mac mini 가 Android release 빌드 SoT 로 가동되고 iOS ipa 빌드 4단계 복구 경로가 박힌 인프라 정비 큰 날.
오늘의 궤적
새벽 ~ 정오: Mac mini 야간 자동 빌드 v2.0a 풀그린(11:53 KST). 어제(4-28) v1.0 PASS:0 FAIL:4 sign NPE 의 근본 원인이 keystore 부재였음을 확인하고, Mac 본진 → Mac mini 로 keystore 4쌍 8파일 rsync 후 4앱 release appbundle 모두 PASS:4 FAIL:0.
오후: claude-skills 운영 인프라 대정비. /handoff 184줄 스킬을 wsl-directive.sh wrapper 로 교체(METHOD A 단순화). sync, to-iphone, land 3 스킬 제거. /night-runner v1 안전모드(read-only 점검만, headless·commit·push 0) 박고 Mac mini launchd 03:00 KST 자동 실행 plist install + 1회 검증 PASS. irun —release → —debug 일관성 통일.
저녁: Mac mini 에서 iOS release ipa 빌드 4단계 복구(cert trust chain → Xcode 자동 provisioning → codesign partition list → DerivedData clean) 후 hanjul.ipa 19,946,345 bytes PASS. hanjul 미커밋 2건(stats sharePositionOrigin 픽스 + 1.1.0+4 bump) 정리 후 origin/main push.
밤: 세션 클리어 후 /goodnight 으로 마감.
Mac mini 인프라 (Android release SoT + iOS 빌드 머신)
Android night-build v2.0a 풀그린 (11:53 KST)
| 앱 | 결과 | 시간 | aab |
|---|---|---|---|
| hanjul | ✅ | 4s | 42.6MB |
| hankeup | ✅ | 6s | 44.1MB |
| mini_expense | ✅ | 7s | 45.7MB |
| pomodoro | ✅ | 7s | 46.3MB |
PASS: 4 / FAIL: 0 (v1.0 09:53 의 PASS:0 FAIL:4 → 2026-04-29.v1.0.bak.md 백업).
근본 원인: v1.0 sign NPE = keystore 부재. 4쌍 8파일 (key.properties + *-upload-keystore.jks) Mac 본진 ~/apps/<app>/android/ → Mac mini 동일경로 rsync (Tailscale internal SSH only, 외부 0). Mac mini 측 chmod 600. 검증 빌드 hanjul 단일 PASS(32.3s) 후 launchctl start com.claude.night-build 일괄 → Gradle daemon + dep cache 효과로 1분 안에 4앱 완료.
SoT 정책 박제 (claude-skills 6d59829): Mac mini = Android release 빌드 SoT, WSL = debug only. WSL 에선 flutter build appbundle --release 실행 금지(keystore 없음, 가짜 빌드 위험). 평시 release keystore 단일 위치 = Mac mini ~/apps/<app>/android/. Mac 본진 archive(~/keystores-archive/<app>/) 는 안전망일 뿐 빌드에 쓰지 말 것.
iOS ipa 빌드 4단계 복구 (21:14 KST PASS)
Mac mini 새 셋업에서 iOS release ipa 빌드 막힘 4단계 차례로 풀어 hanjul.ipa 19,946,345 bytes 생성 검증.
- Cert trust chain — Apple WWDR G3 인증서 미설치 → 빌드 시 codesign 거부. WWDR G3 설치로 해소.
- Xcode 자동 provisioning — Team 자동 설정, signing 모드 Automatic.
- Codesign partition list — 빌드 산출물의 partition entitlements 정렬.
- DerivedData clean — Xcode 캐시 잔여물 충돌 → 클린 빌드.
처방 명령어와 단계별 검증 포인트는 project_mac_mini_ios_ipa_recovery.md 메모리에 박힘. 다음 mac-mini 새 셋업 때 이 파일 읽으면 1시간 안에 끝낼 수 있음.
GitHub SSH 등록
Mac mini ed25519 공개키를 GitHub SSH key 에 등록. 인증 OK 확인되어 claude-automations clone/pull 자동 가능. Tailscale ssh mac-mini 단축어 + user@mac-mini, M1 arm64.
/handoff 스킬 → wsl-directive.sh wrapper 단순화
동기
기존 /handoff 184줄 스킬: 세션마다 디렉티브 본문 + 메타 정리 + 텔레그램 forward + 핸드오프 폴더 archive 까지 한꺼번에. 무거움. 실제 사용 패턴 보면 “디렉티브 텍스트를 SSH+tmux 로 WSL 세션에 직접 붙여넣고 텔레그램에 본문 forward” 만 일관됨.
변경
~/.claude/automations/scripts/wsl-directive.sh새 wrapper 추가 (82b62d7)- 자동으로 텔레그램에 디렉티브 본문 forward 기능 박음 (
6052c6d) /handoff스킬 제거 (75a9a70, claude-skills)- 과거 디렉티브 archive 폴더 (
~/.claude/skills/handoffs/, 45개 파일) 는 보존만 (새 디렉티브는 더 이상 여기 박지 않음)
룰 갱신
globals/CLAUDE.md“크로스 디바이스 디렉티브 송신” 절: METHOD A =wsl-directive.sh호출. 텔레그램 reply 복붙은 “복붙용으로 / 복사해서” 명시 요청 시 fallback.feedback_handoff_method_a_default.md: revised_date 2026-04-29, 도구 교체 명시, /handoff 폐기 사실 박음.
/night-runner v1 안전모드 가동
컨셉
야간 사이드 프로젝트 러너 v1 안전모드 — projects.yaml 기반 라운드로빈으로 enabled repo 1개 골라 read-only 점검 5개 (BACKLOG/TODO grep, TODO·FIXME·HACK, 7일 commit silence, test, lint) 수행 후 markdown 보고서 + 텔레그램 1통. 코드 수정 / commit / push / PR 0.
산출물
~/.claude/automations/night-runner/(claude-automationsbccc165)check.sh(read-only 점검 본체)reports/YYYY-MM-DD-<repo>.md(라운드별 보고서)
claude-skills/night-runnerSKILL.md (트리거/night-runner)- Mac mini launchd 03:00 KST 자동 실행 plist (
com.claude.night-runner-check.plist,5b072ff)
검증
Mac mini 1회 수동 실행 PASS. 매일 03:00 KST 자동 가동. v1 = headless 0, claude 호출 0, 자동 commit 0. PR 만드는 변형은 의도적으로 비활성.
claude-skills 정리
| SHA | 변경 | 의도 |
|---|---|---|
b30abb7 | sync, to-iphone, land 3 스킬 제거 | 4-21 자동화 폐지 후 사용 0 |
75a9a70 | /handoff 184줄 제거 | wsl-directive.sh wrapper 로 교체 |
6048b4b | goodnight step 4.5 hostname 분기 드롭 | Mac=SoT 직접 호출 통일, WSL 핸드오프 사일런트 실패 회피 |
cb5f0b2 | irun —release → —debug | arun 과 일관성, 디바이스 디버그용으로 통일 |
c49a0dd | todo 디바이스 태깅 규칙 정비 (5건 일괄) | 🍎/🪟/🤝 태그 + 클레임 마커 폐기 |
6d59829 | policy: Mac mini = Android release 빌드 SoT | WSL release 금지 정책 명문화 |
ca6ac01 | night-runner SKILL.md v1 반영 | 03:00 KST 자동 실행 동작 문서화 |
hanjul (한줄일기)
코드 변경
4406d20fix(hanjul/stats): 공유 sharePositionOrigin 지정 — iPad popover 크래시 방지525b549chore(hanjul): bump 1.1.0+4
iOS 1.1.0+4 ipa 가 Mac mini 에서 검증 빌드된 것이 곧 4-28 23:04 Apple 심사 제출 빌드와 같은 라인. iPad share popover sharePositionOrigin 미지정 크래시 방어가 추가됨.
Android 출시 큐
- 패키지
com.daejongkang.hanjulSHA-256 “확인됨” Play Console 등록 완료(4-28). - 다음 사이클: Play Console “앱 만들기” 폼 1900원 유료 (강대종님 직접 — 자동화 시도 시 무료 디폴트로 fallback 위험).
하드룰 신설
지휘관 1명 원칙 (4-28 도입, 4-29 운반체 예외 명문화)
이 프로젝트의 지휘관은 Mac 세션 1개뿐. WSL 은 작업자, Mac mini 는 24/7 launchd 노드 (챗봇 세션 추가 금지).
- WSL 세션 = 받은 지시 수행 + 결과 보고만. 설계 변경/방향 변경/새 인프라 제안 금지. 옵션 메뉴 surface 금지.
- Mac mini = 24/7 자동 실행 노드. 챗봇 세션 추가 금지. 설계 판단/다음작업 결정 금지.
- 방향성: Mac→WSL = directive, WSL→Mac = report.
- 운반체 예외: 사용자 명령을 자동화로 라우팅하는 트리거(cross-device 자동 핸드오프 패턴)는 directive 가 아닌 운반체. WSL 이 자체 판단으로 새 방향을 결정한 게 아니면 위반 아님.
WSL 작업자 옵션 메뉴 금지 (feedback_wsl_worker_no_option_menu.md)
WSL 세션이 “뭐할래?” 받아도 1/2/3 후보 surface 하지 말 것. 상태 보고 + 지시 대기로 끝낼 것.
”박다” 은어 금지 (feedback_no_paktta_jargon.md 갱신)
텔레그램 답변·채팅 포함 모든 출력에서 “박다” → 1) 셋업 / 2) 기록 / 3) 하드코딩 등 평이한 한국어로.
인프라·운영
- 메모리 신규/갱신 17건 — project_mac_mini_ios_ipa_recovery, project_mac_mini_night_builder_v2_passed, project_night_runner_v1_deployed, project_commander_one_principle, reference_mac_mini_github_ssh_key, feedback_wsl_worker_no_option_menu, feedback_handoff_method_a_default(revised), feedback_device_affinity_tagging, feedback_no_paktta_jargon, multi_device_rules, project_hanjul, project_hanjul_wsl_build_artifact, project_handoff_bidirectional_zero_touch 등.
- claude-automations 5 + claude-skills 7 + hanjul 2 = 의미있는 코드 커밋 14건.
- daejong-page auto-activity heartbeat 다수 (실작업 push 는 worklog 본 커밋이 처음).
- night-runner Mac mini launchd schedule 03:00 KST 활성. 매일 자동 가동.
학습·상담
- Mac mini 새 셋업에서 iOS ipa 빌드 막힘 = 단일 원인이 아니라 4단계 누적 차단. 1단계 풀어도 다음 단계가 막혀 있어 “한 번에 PASS” 가 안 나오는 패턴. 처방 명령어 + 단계별 검증 포인트를 메모리에 박아둔 게 다음 셋업 때 가장 큰 자산이 됨.
- /handoff 184줄 → wsl-directive.sh wrapper 1개로 단순화 = “라이브러리 vs wrapper” 의 전형. 사용 패턴이 단일하면 wrapper 가 항상 더 가볍다.
- night-runner v1 = “안전모드 먼저, 자율성은 나중” 원칙. 첫 가동에서 commit/push/PR 다 끄고 read-only 점검만 — 신뢰 쌓이면 단계적 ramp-up.
남은 작업
- hanjul Android 1900원 유료 출시 사이클 (Play Console 앱 만들기 폼 → AAB 업로드 → Closed Testing → 워크시트 → 심사 제출). Play 발행 후 무료 변경 불가.
- iOS Apple 심사 결과 메일 대기 (4-28 23:04 제출, 24~48h).
- night-runner ramp-up 단계 결정 (현재 v1 read-only 점검만 — 다음 단계는 BACKLOG 자동 picking? PR 만드는 v2?).
- Mac mini AGP 9+ newDsl 마이그레이션 (NOT IN SCOPE 였음, 결정 대기).
- iOS Mac mini 빌드 자동화 (현재 수동 빌드 PASS 만 검증).
관련 커밋
| repo | SHA | 메시지 |
|---|---|---|
| hanjul | 4406d20 | fix(hanjul/stats): 공유 sharePositionOrigin 지정 — iPad popover 크래시 방지 |
| hanjul | 525b549 | chore(hanjul): bump 1.1.0+4 |
| claude-automations | 6052c6d | wsl-directive.sh: auto-forward directive copy to Telegram |
| claude-automations | 82b62d7 | add wsl-directive.sh wrapper for Mac→WSL METHOD A handoff |
| claude-automations | 513bde9 | remove daily-sync-and-learn.py |
| claude-automations | 5b072ff | night-runner: Mac mini launchd 03:00 KST (com.claude.night-runner-check.plist) |
| claude-automations | bccc165 | night-runner: v1 read-only 안전모드 (check.sh + reports/) |
| claude-skills | cb5f0b2 | irun: —release → —debug (arun 과 일관성 통일, 2026-04-29) |
| claude-skills | 6d59829 | policy: Mac mini = Android release 빌드 SoT, WSL = debug only |
| claude-skills | 75a9a70 | remove /handoff skill (184줄), replaced by wsl-directive.sh wrapper |
| claude-skills | c49a0dd | todo: 디바이스 태깅 규칙 정비 (5건 일괄) |
| claude-skills | b30abb7 | remove sync, to-iphone, land skills |
| claude-skills | 6048b4b | goodnight step 4.5: drop hostname branching, always direct insta-post |
| claude-skills | ca6ac01 | night-runner: SKILL.md v1 안전모드 동작 반영 + 03:00 KST 자동 실행 |