← 작업일지

2026-04-29 · v1.0.0

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
hanjul4s42.6MB
hankeup6s44.1MB
mini_expense7s45.7MB
pomodoro7s46.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 생성 검증.

  1. Cert trust chain — Apple WWDR G3 인증서 미설치 → 빌드 시 codesign 거부. WWDR G3 설치로 해소.
  2. Xcode 자동 provisioning — Team 자동 설정, signing 모드 Automatic.
  3. Codesign partition list — 빌드 산출물의 partition entitlements 정렬.
  4. 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-automations bccc165)
    • check.sh (read-only 점검 본체)
    • reports/YYYY-MM-DD-<repo>.md (라운드별 보고서)
  • claude-skills /night-runner SKILL.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변경의도
b30abb7sync, to-iphone, land 3 스킬 제거4-21 자동화 폐지 후 사용 0
75a9a70/handoff 184줄 제거wsl-directive.sh wrapper 로 교체
6048b4bgoodnight step 4.5 hostname 분기 드롭Mac=SoT 직접 호출 통일, WSL 핸드오프 사일런트 실패 회피
cb5f0b2irun —release → —debugarun 과 일관성, 디바이스 디버그용으로 통일
c49a0ddtodo 디바이스 태깅 규칙 정비 (5건 일괄)🍎/🪟/🤝 태그 + 클레임 마커 폐기
6d59829policy: Mac mini = Android release 빌드 SoTWSL release 금지 정책 명문화
ca6ac01night-runner SKILL.md v1 반영03:00 KST 자동 실행 동작 문서화

hanjul (한줄일기)

코드 변경

  • 4406d20 fix(hanjul/stats): 공유 sharePositionOrigin 지정 — iPad popover 크래시 방지
  • 525b549 chore(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.hanjul SHA-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 만 검증).

관련 커밋

repoSHA메시지
hanjul4406d20fix(hanjul/stats): 공유 sharePositionOrigin 지정 — iPad popover 크래시 방지
hanjul525b549chore(hanjul): bump 1.1.0+4
claude-automations6052c6dwsl-directive.sh: auto-forward directive copy to Telegram
claude-automations82b62d7add wsl-directive.sh wrapper for Mac→WSL METHOD A handoff
claude-automations513bde9remove daily-sync-and-learn.py
claude-automations5b072ffnight-runner: Mac mini launchd 03:00 KST (com.claude.night-runner-check.plist)
claude-automationsbccc165night-runner: v1 read-only 안전모드 (check.sh + reports/)
claude-skillscb5f0b2irun: —release → —debug (arun 과 일관성 통일, 2026-04-29)
claude-skills6d59829policy: Mac mini = Android release 빌드 SoT, WSL = debug only
claude-skills75a9a70remove /handoff skill (184줄), replaced by wsl-directive.sh wrapper
claude-skillsc49a0ddtodo: 디바이스 태깅 규칙 정비 (5건 일괄)
claude-skillsb30abb7remove sync, to-iphone, land skills
claude-skills6048b4bgoodnight step 4.5: drop hostname branching, always direct insta-post
claude-skillsca6ac01night-runner: SKILL.md v1 안전모드 동작 반영 + 03:00 KST 자동 실행