← 작업일지

2026-04-28 · v1.0.1

2026.04.28 작업일지 v1.0.1

23시 이후 추가분: 지휘관 1명 원칙 Mac 적용 + 운반체 예외 + 정합성 보강 R1/R2/R3. /night-runner v0 → v1 안전모드 재설계 + Mac mini launchd 03:00 KST 가동. Mac mini SSH 키 GitHub 등록 + claude-automations/skills clone + 텔레그램 채널 미러링.

오늘의 궤적 (v1.0.1 추가분)

밤 23시: WSL 작업자가 어제 박은 “지휘관 1명 원칙” 변경분 (globals/CLAUDE.md, AGENT.md, handoff/SKILL.md) 을 Mac 본진에서 점검·적용 요청. claude-skills + ~/.claude/skills (심볼릭) fast-forward pull 로 한 번에 적용. ~/.claude/CLAUDE.md / AGENT.md 가 globals/* 심볼릭이라 다음 turn 부터 hard rule 즉시 발효.

23:30 KST: 회색지대 점검 후 b 항목(to-iphone/land 페어 같은 사용자 명령 운반 트리거) 운반체 예외 한 줄 globals/CLAUDE.md + AGENT.md 에 추가. a/c 회색지대는 재분석 결과 보강 불필요 드롭.

23:42 KST: 멀티 디바이스 오케스트레이션 정합성 보강 R1/R2/R3 — handoff/SKILL.md L64 의 WSL→Mac 핑 텍스트 “directive 따라 진행” → “report 검토/판단” (회귀 직접 위험), §3 명칭 “디렉티브 메시지 포맷 규칙” → “디렉티브 / 리포트 메시지 포맷 규칙” + 도입 한 줄, todo/SKILL.md 0단계 라우팅 운반체 명시.

자정 직후 (4/29 00:14 KST): /night-runner 재설계 사이클 진입. v0 (WSL 측 ~/.claude/runner/run.sh, claude headless —agent repo-janitor + —dangerously-skip-permissions + janitor 브랜치 + git push + gh pr create + 2시간 timeout + $5 예산) 을 v1 안전모드 (read-only 점검만, claude headless 0, commit/push/PR 0, 코드 수정 0) 로 다시 그림. Mac mini launchd 매일 03:00 KST 자동 실행 (02:00 night-build 와 시각 분리).

00:33 KST: Mac mini private repo (claude-automations) clone 인증 실패 → SSH 키 generate + 강대종님 GitHub Settings 수동 등록 → 검증 PASS → 인프라 셋업 (claude-automations/skills clone + telegram channel 미러링).

00:37 KST: Mac mini ~/Library/LaunchAgents/com.claude.night-runner-check.plist 심볼릭 + launchctl bootstrap + 1회 kickstart 검증 PASS (last exit code 0, 보고서 SKIPPED — dutch_pay_calculator Mac mini clone 부재, scripts 자체 동작 정상).

지휘관 1명 원칙 — 어제 결정의 Mac 본진 적용 + 운반체 예외

적용 (1차 사이클)

  • 어제 WSL 작업분 origin/main 5 commits 확인 → claude-skills + ~/.claude/skills (심볼릭) 한 번에 fast-forward pull
  • ~/.claude/CLAUDE.md / AGENT.md 가 ~/claude-skills/globals/* 심볼릭 → 다음 turn 부터 hard rule 즉시 발효
  • 회색지대 점검 결과 a/c 항목은 재분석 후 보강 불필요로 드롭, b 항목(사용자 명령 운반 트리거 vs WSL 자체 directive)만 globals 보강

운반체 예외 추가 (commit a00825b)

globals/CLAUDE.md 의 “지휘관 1명 원칙” 절 끝에 한 줄:

예외 (운반체): 사용자 명령을 자동화로 라우팅하는 트리거(/to-iphone → /land 페어 등 WSL 자동화→Mac 자동화)는 directive 가 아닌 운반체. WSL 세션이 자체 판단으로 새 방향을 결정한 게 아니면 새 원칙 위반 아님.

globals/AGENT.md 동일 위치에 예시 1개 더 명시 (Mac /goodnight step 4.5 → WSL /insta-post 핸드오프).

정합성 보강 R1/R2/R3 (commit 3e85237)

  • R1 (회귀 직접 위험): handoff/SKILL.md L64 의 WSL→Mac 핑 텍스트 directive 따라 진행report 검토/판단. 새 원칙(WSL→Mac=report) 와 정확히 일관.
  • R2 (명칭 헷갈림): handoff §3 명칭 디렉티브 메시지 포맷 규칙디렉티브 / 리포트 메시지 포맷 규칙 + 도입 한 줄 (“이 포맷 규칙은 Mac→WSL directive 와 WSL→Mac report 양쪽 메시지 형식에 동일 적용 — 형식만 동일이지 컨텐츠 권한은 비대칭”).
  • R3 (운반체 명시 보강): todo/SKILL.md 0단계 라우팅 — (/to-iphone → /land 패턴)(사용자 발화 운반체 — globals 운반체 예외 적용, /to-iphone → /land 동일 패턴).

a/c 회색지대 드롭 사유: a) handoff/SKILL.md L122 는 이미 “잘못된 예 ❌” 블록 안 anti-example. c) memory feedback_handoff_method_a_default.md 의 “양방향” 키워드는 강대종님 발화 인용 + 사용자 발화 매칭용 트리거. 정의 자리(handoff/SKILL.md “방향성” 절) 따로 있음.

/night-runner — v0 → v1 안전모드 + Mac mini 가동

v0 위험 요소 (재설계 동기)

  • --dangerously-skip-permissions 권한 우회
  • claude -p --agent repo-janitor 자율 코드 수정
  • git push + gh pr create 자동 PR 생성
  • timeout 7200 + 예산 $5
  • 사람 review 없는 야간 자동 실행 → 잘못된 PR 누적 위험

v1 안전모드 동작

  • 진입점: ~/claude-automations/scripts/night-runner-check.sh
  • projects.yaml 라운드로빈 enabled repo 1개 점검 (정해진 시간 정해진 스크립트)
  • 점검 5개 (read-only):
    1. BACKLOG.md / TODO.md 미해결 항목 grep
    2. TODO|FIXME|HACK 소스 디렉토리 grep
    3. 마지막 commit 7일 경과 여부 (COMMIT_SILENT_DAYS=7)
    4. test 호출 (pubspec.yaml → flutter test / package.json → npm test / pyproject.toml → pytest -q)
    5. lint 호출 (flutter analyze / npm run lint / ruff check .)
  • 출력: ~/claude-automations/reports/night-runner/$(date +%F).md (suffix -2/-3 같은 날 재실행 시)
  • 텔레그램 1통 완료 알림 (시작 알림 없음 — 새벽 노이즈 제거)
  • 전체 timeout 1200초, 실패 시 재시도 0
  • claude headless 0, --dangerously-skip-permissions 0, git commit/push/branch/PR 0

호환성 패치 (작성 중 발견)

  • bash 3.2 호환 (mapfile Mac 기본 bash 에 없음 → read 루프로 대체)
  • python3 yaml 의존 제거 (Mac mini 기본 python3 에 pyyaml 없음 → stdlib regex 파싱)
  • timeout portable wrapper (timeout Mac 기본 없음 → gtimeout / perl alarm fallback)

Mac mini install (4/29 00:37 KST PASS)

  • ~/Library/LaunchAgents/com.claude.night-runner-check.plist 심볼릭 → ~/claude-automations/launchd/
  • launchctl bootstrap gui/$(id -u) 성공
  • 1회 kickstart 검증: last exit code 0, 보고서 1개 (SKIPPED — dutch_pay_calculator Mac mini 측 clone 부재. 스크립트 자체 동작 정상)
  • 매일 03:00 KST 자동 실행 (RunAtLoad false, 02:00 com.claude.night-build 와 시각 분리)

WSL 측 v0 처리

  • ~/.claude/runner/run.shrun.sh.disabled mv (보존, 폐기 X)
  • ~/.claude/runner/settings-janitor.json.disabled mv
  • v2 (제한적 PR 모드) 검토 시 참고용으로 남겨둠

Mac mini 인프라 셋업 (인증 사고 + 풀 셋업)

claude-automations clone 실패

처음에 https URL 로 clone 시도 → could not read Username for 'https://github.com'. claude-automations 가 private repo 라 인증 부재. claude-skills 는 public 이라 OK.

SSH 키 generate + GitHub 등록

  • Mac mini 측 ssh-keygen -t ed25519 -N '' -C 'user@mac-mini' (~10초)
  • public key 강대종님께 텔레그램 송신
  • 강대종님 GitHub Settings → SSH and GPG keys → New SSH key 등록 (4/29 00:35 KST)
  • 검증: ssh mac-mini "ssh -T git@github.com" → “Hi ssamssae!”

인프라 미러링

  • ~/claude-automations clone (SSH URL)
  • ~/claude-skills clone (HTTPS URL — public)
  • ~/.claude/channels/telegram/{send.sh, .env} SCP from Mac 본진
  • ~/.claude/runner/projects.yaml SCP from Mac 본진 (Mac mini path 동일 /Users/user/*)
  • ~/Library/LaunchAgents/com.claude.night-runner-check.plist 심볼릭

미설치 (현 시점, someday 박힘)

  • flutter — Flutter test/lint 일부 SKIPPED
  • python3 yaml — check.sh 가 stdlib regex 우회로 OK
  • gh CLI — 미확인
  • Claude Code CLI — 의도적 미설치 (지휘관 1명 원칙: Mac mini 챗봇 X)

부수 발견 (보고만, 별도 사이클)

  • d19a315 night-build 도 Mac mini 측 git pull + launchctl bootstrap 안 거쳤음. 02:00 잡 사실상 가동 0 — 별도 사이클로 처리
  • install.sh 의 hostname case 패턴 *.local|Daejong*|USER* 가 Mac mini hostname mac-mini 매칭 안 함. 이번 install 은 직접 launchctl bootstrap 으로 우회. 다음 사이클에 한 줄 패치 후보 (someday)

인프라·스킬·자동화

  • 새 메모리 3건 박음:
    • project_commander_one_principle.md
    • project_night_runner_v1_deployed.md
    • reference_mac_mini_github_ssh_key.md
  • MEMORY.md 활성 프로젝트 + 인프라/참조 섹션 갱신
  • someday 4건 추가:
    • install.sh hostname case 패턴 mac-mini* 추가
    • d19a315 night-build Mac mini install
    • night-runner v1.1 보고서 텔레그램 inline
    • dutch_pay_calculator Mac mini clone + flutter 설치
  • todos.md 의 한줄일기 todo 본문 갱신 (iOS 완료 표시 + Android 만 남기기)

학습·상담

  • 시각 표기 사고: 23:08 KST 라고 박았는데 진짜는 4/29 00:08 KST. UTC ts +9h KST 변환 실수. 시스템 date "+%Z" 로 확인 후 정정. 강대종님이 “12:13” (12시간 표기 AM) 으로 정정 요청.
  • bash 3.2 함정: Mac 기본 bash 가 아직 3.2 라 mapfile 미지원. read 루프로 대체.
  • timeout 함정: Mac 기본 timeout 없음. brew coreutils 의 gtimeout 또는 perl alarm fallback 필요.

남은 작업

  • 한줄일기 Android 1900원 출시 (강대종님 직접, Play Console 앱 만들기)
  • iOS 심사 결과 대기 (4/28 23:04 제출, 24~48h)
  • night-runner v1 첫 자동 실행 모니터 (오늘 03:00 KST, 강대종님 06:30~ 보고서 manual review)

관련 커밋 (4/28 23시 이후 + 4/29 새벽)

repoSHA메시지
claude-skillsca6ac01night-runner: SKILL.md v1 안전모드 동작 반영 + 03:00 KST 자동 실행
claude-skills3e85237skills: 지휘관 1명 원칙 정합성 보강 (R1/R2/R3)
claude-automations5b072ffnight-runner: Mac mini launchd 03:00 KST plist
claude-automationsbccc165night-runner: v1 read-only 안전모드 (check.sh + reports/)
claude-skillsa00825bglobals: 지휘관 1명 원칙 — 운반체 예외 명시 (b 회색지대)