← 작업일지

2026-05-17 · v1.0.0

2026.05.17 작업일지 v1.0.0

두 단계 — 메모요 sync 자율루프(00:30 ~ 11:37) → 큐 대시보드 인프라 셋업(11:40 ~ 14:25). 야간 cron이 알아서 굴리던 메모요 작업을 종료시키고, 첫 paid 도메인 + Cloudflare Zero Trust 까지 박은 하루.

오늘의 궤적

  • 00:30~07:26: 메모요 sync 자율루프 cron 10회 fire. S1 spec → S2 design → S3 code → S4/S6/S7 사전 작업 위젯·문서 누적. S3 비가역 hold(Firebase 프로젝트+크레덴셜) 에 막혀 중단 마커 박음.
  • 11:35: 형님 “메모요 세션 종료처리해도 되지 않나? 작업 없다며” — 정확히 진단. 자율루프 종료 결정.
  • 11:37~11:50: launchd unload + tmux kill + SYNC_PROGRESS.md 종료 마커 push. 큐 가시성 문제 surface → GUI 대시보드 설계 논의.
  • 11:50~12:47: 도메인 등록 결정 → kangdaejong.com Business 결제($10.46, 마이너스베타스튜디오 사업자 명의).
  • 12:48~14:15: Cloudflare Zero Trust + Tunnel(Mac mini, queue-dashboard) + Public application route(queue.kangdaejong.com → localhost:7777) + Access policy(이메일 OTP). 인프라 100% 완성.
  • 14:20: 5 PR squash 머지(wordyo/mini_expense/hanjul widget/hanjul lint/pomodoro), lotto-calc PR #17 fresh ack 대기.
  • 14:25: 형님 /goodnight 트리거.

메모요 sync 자율루프 — 첫 야간 자율 진척

야간 자율 사이클의 첫 실험. launchd 45분 cron 이 fresh 컨텍스트로 tmux memoyo-loop 세션에 paste, Claude 가 SYNC_PROGRESS.md(S1~S8) 읽고 다음 단계 자율 진행하는 구조.

FireTime(KST)Commit단계
#100:3007d9b78SYNC_PROGRESS.md 셋업
#100:3769d5dad / c2dd61dS1 spec — backend 비교 + Firebase 추천 + LWW
#201:19d19da5d / 46e3a10S2 design — Firestore 모델·트리거·오프라인 큐·마이그레이션
#302:074f7db99 / 849cfedS3 code — firebase_core/auth/firestore + bootstrap 가드 + 단위 4/4
#402:50180e97dS7 사전 — privacy policy 동기화 갱신 초안
#503:348836b0eS7 사전 — 통합 테스트 시나리오 문서
#604:1932ad567S6 사전 — SyncStatusDot 위젯 + 위젯 테스트 5/5
#705:03af8a2c5S4 — AuthService Firebase 가드 단위 6/6
#805:492f1f80eS4/S6 사전 — SyncEnableCard 위젯 + firestore.rules 분리
#906:35d4ce0a1refactor — humanize 헬퍼 추출 + 7/7 PASS
#1007:183d8c783test — SyncService 가드 단위 4/4
#1007:2654b38ca중단 마커 + 다음 추천작업 박음 (S3 비가역 hold 인식)

총 12+ commit mac/memoyo-sync-2026-05-17 브랜치 누적. PR 미생성, 형님 재개 시 결정.

종료 결정 (11:37)

형님이 “작업 없다며 종료처리해도 되지?” 트리거. 진단 정확 — S3 비가역 hold (Firebase 프로젝트 생성 + google-services.json/GoogleService-Info.plist 배치 = 형님 손) 풀리지 않으면 S4/S5/S6 wiring 다 막힘. 사전 작업(SyncStatusDot/SyncEnableCard/privacy 초안/test 시나리오) 도 다 끝나서 남은 사전 폭 거의 0. 다음 fire 가 무한 marginal polish 들어갈 가능성.

조치:

  • launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.daejongkang.memoyo-sync-loop.plist → launchctl list 에서 사라짐 확인
  • tmux kill-session -t memoyo-loop → ls 결과 없음 확인
  • ~/simple_memo_app/SYNC_PROGRESS.md 상단에 종료 마커 박고 commit a5eee9d push to origin/mac/memoyo-sync-2026-05-17
  • plist 는 ~/Library/LaunchAgents/ 에 그대로 보존 → 재개 시 launchctl bootstrap gui/$(id -u) <plist> 한 줄로 복귀

메모리 project_memoyo_sync_loop_2026_05_17.md status: terminated 갱신, 진척 마커 S1/S2 완료, S3 코드 부분+나머지 단계 보류 inline.

큐 가시성 문제 → GUI 대시보드 설계 → 인프라 셋업

문제 surface (11:38, 형님)

“잡일이나 메인잡이 stale 이고, 상황 바뀌면서 안 할 작업도 꺼내서 함. 내가 잡일/메인잡 선택해서 돌리고 stale/안할 거 수정·삭제 지시하고 싶은데 UI 가 전혀 안 보임.”

진단 — 노드가 작업을 “이미 픽한 다음에” 결과만 텔레그램으로 surface, 픽 전에 끼어들 채널 없음. 5 노드 큐 분산.

설계 옵션 surface

  • (1) 텔레그램 픽 전 60초 veto window — 노이즈 큼(5노드 × 잡일)
  • (2) 일일 큐 매니페스트 — 아침 standup 1통
  • (3) /queue 슬래시 — on-demand
  • (4) 별도 GUI 화면 + 어디서나 폰으로 접근

형님 (4) 선택 → 인터넷 공개 사이트 결정. 도메인 신규 등록 동의.

도메인 등록 (11:50~12:47)

  • 후보 가용성 확인: daejongkang.com / kangdaejong.com / ssamssae.com 등 비어있음, claw.kr / clawkang.com 누가 잡음
  • 형님 선택: kangdaejong.com
  • 등록처 후보: Cloudflare Registrar(at-cost ~$10, DNS 자동) vs 가비아(한국 사업자 처리)
  • 형님 이미 CF 계정 있음(ssamssae@naver.com, daejong-page CF Pages 33m 전 active 확인) → CF Registrar
  • 마이너스베타스튜디오 회사 이메일 가능성 고민 → minusbetastudio.com 추가 등록 vs kangdaejong.com 단일 → 형님 “$10 아깝다” → 단일
  • WHOIS 입력: First=DAEJONG, Last=KANG, Phone +82, Address line 1=4, Mallijae-ro 10-gil, line 2=Apt 102, City=Seoul, State=Seoul, ZIP=04185(마포구 공덕동 권역 확인), Country=South Korea
  • Account Type 전환: Personal → Business, Organization=Minus Beta Studio, VAT/GST=878-21-02478(사업자등록번호)
  • 첫 시도 CF risk system 일시 차단(temporarily blocked, please wait a few minutes). CAPTCHA 통과는 OK. 10분 대기 백그라운드 타이머(PID 84552, sleep 600 → curl Telegram) 셋업
  • 재시도 성공 → “You bought kangdaejong.com” 12:47 KST, Updated 2026-05-17T03:46:36Z
  • 결제 $10.46/yr, Auto-renew ON, 다음 갱신 2027-05-17, Naver Pay 글로벌브랜드 카드 SMS OTP 통과

Cloudflare Zero Trust 활성화 (12:48~12:51)

  • Get started → Choose a plan Free($0/seat, 50 seat limit)
  • “I authorize Cloudflare to charge for usage exceeding free limits” 체크(50명 초과시만, 형님 1명이라 발동 0) → Activate
  • Team 자동 생성: late-bird-2983.cloudflareaccess.com

Tunnel 생성 (12:51~13:13)

  • Networks → Connectors → Add a tunnel (옛 “Tunnels” 메뉴가 Connectors 로 리브랜딩)
  • Type: Cloudflared(Recommended, Mesh 베타는 Linux 전용)
  • Name: queue-dashboard
  • “Install and run a connector” 화면 → 토큰 발급(eyJhIjoiMGY1NzQ2NjA3...)
  • 호스팅 결정: Mac 본진 vs Mac mini → Mac mini 채택
    • Mac mini = 진짜 24/7 server-grade(launchd 워커 + 디스플레이 X), 본진은 작업 머신
    • 본진은 sleep/restart/업그레이드 시 큐 대시보드 끊김 위험 → 서비스/작업 분리 원칙
    • 5 노드 큐 통합 phase 2-3 도 Mac mini 가 SSH 로 끌어모으는 게 자연스러움
    • JARVIS-like 시스템 방향성 일치(서비스=서버)
  • 본진에서 SSH 로 Mac mini brew install cloudflared(v2026.5.0 설치, /opt/homebrew/bin/cloudflared)
  • 형님이 Mac mini Terminal.app 에서 sudo cloudflared service install <token> 직접 실행(passwordless sudo 안 켜져 있어 SSH 자동 불가)
  • “MacOS service for cloudflared installed successfully” 확인 → 데몬 launchd 등록 + 자동 시작
  • 본진 verify: pgrep 2 PIDs(18792, 18831), 3 connections 등록(icn06/icn01 PoP, QUIC protocol)
  • Tunnel HEALTHY ✓, uptime 11m

Public application route (13:24)

  • Tunnel detail 페이지 → Published application routes 탭(옛 “Public Hostnames” 의 새 이름)
  • Subdomain=queue, Domain=kangdaejong.com, Path=빈칸(^/blog 은 placeholder, 처음엔 실제 텍스트로 오인), Type=HTTP, URL=localhost:7777
  • HTTP 채택 이유: cloudflared→localhost FastAPI 가 internal loopback, self-signed cert 불필요. 외부는 자동 HTTPS(CF 가 TLS terminate)
  • 포트 7777 채택 이유: 1024 이상(root 불필요), commonly free, memorable
  • Save → DNS 자동 생성(queue.kangdaejong.com CNAME → 터널)
  • 검증: dig queue.kangdaejong.com +short → 172.67.179.228 / 104.21.40.68(CF edge), curl -sSI https://queue.kangdaejong.com → 502 Bad Gateway(FastAPI 안 떠서 정상, tunnel→cloudflared 까지 경로 살아있음)

Access policy (14:05~14:15)

  • Access controls → Applications → Add an application → Self-hosted and private → Public DNS
  • Application name=queue, Session=24h, Subdomain+Domain=queue.kangdaejong.com
  • Policy: name=Allow Daejong, Action=Allow, Selector=Emails, Value=ssamssae@naver.com
  • Login methods: One-time PIN(이메일 OTP), 다른 OAuth 비활성
  • MFA / Purpose justification / Temporary authentication / RDP Clipboard 다 OFF(개인 1명 사용)
  • Save Policy → Save Application
  • 검증: curl -sSI https://queue.kangdaejong.com302 redirect to late-bird-2983.cloudflareaccess.com/cdn-cgi/access/login/.... Access 로그인 페이지 정상.

~/todo/ git sync (13:25)

  • 본진 ~/todo/ 이미 git repo, origin: ssamssae/todo, branch main, clean ✓
  • 별도 sync repo 셋업 불필요(기존 활용)
  • Mac mini git clone git@github.com:ssamssae/todo.git ~/todo 성공
  • 양쪽 같은 commit c21113c 동기화

lotto-calc PR 사고 정리

WSL(DESKTOP-I4TR99I) 가 P2/P4 sweep 6 repo 중 lotto-calc 하나 step 0 git fetch+status 누락 → 옛 commit 563edca(PR #9 시드 파이프라인) 위에 분기 → PR #16 이 +296/-7 / 7 파일 / CONFLICTING 으로 본진 검증에 적발.

조치(WSL 자체):

  1. PR #16 close + comment 로 base mismatch 명시
  2. local main → origin/main reset —hard(12 commit fast-forward)
  3. 새 branch wsl/lotto_calc-widget-test-fix-2026-05-17-v2 를 origin/main 3c5d410 fresh 위에서 분기
  4. widget_test.dart 단독 patch(+6/-9, 1 파일) — origin/main UI 텍스트 매칭(행운번호 생성기/번호 세트 5/새로 생성) + 패키지 이름(lottocalcrandompick) + A1~A5 라벨 → minimal smoke
  5. push + PR #17 OPEN

본진 처리:

  • GH API 로 PR 상태 검증 ✓(PR #16 CLOSED, #17 OPEN/base=main/+6-9/MERGEABLE/CLEAN, 5 PR 모두 MERGEABLE/CLEAN)
  • 형님 사전 ack “5 PR 머지해줘” → 5 PR squash 머지(—delete-branch):
    • wordyo #32 MERGED 02:41:12Z
    • mini_expense #1 02:41:16Z
    • hanjul widget #17 02:41:20Z
    • hanjul lint #16 02:41:24Z
    • pomodoro #1 02:41:28Z
  • lotto-calc #17 fresh ack 필요로 hold
  • 3-channel 완료: (1차) mac-report 수신 / (1.5차) WSL reverse reply 송신(1032 bytes) / (2차) 형님 텔레그램

이슈 박제: ~/.claude/skills/issues/2026-05-17-lotto-calc-pr16-stale-base-mismatch.md 신규. 교훈: 모든 repo sweep 시작 시 step 0 git fetch + git status 무조건. 기존 메모리 feedback_stale_branch_origin_default_check 적용 누락 사례 — 룰은 있었으나 sweep 코드 패스에 inline 안 됨이 root cause.

별건 — origin/main 자체의 broken state: test/lotto_history_seed_test.dart 2건이 assets/lotto_history.json 누락으로 fail. 본 PR scope 밖, 별 사이클로 별 PR 처리 예정.

인프라·스킬·자동화

  • claude-automations 5 commit: mac-report-reverse-reply hook 의 grep list 에 mac-mini-directive.sh 추가(60070c9), 4 sister script self-reference path unification(cc61ab8), notebook3060-directive self-host skip(6f80a33), envtool remove subcommand 머지(#28), agent-msg-notify deprecated hermes 제거(cc6d567)
  • claude-skills 3 commit: hermes → notebook3060 정리 spec PR #54 머지(eda2bbb), 신규 이슈 2건 auto-sync(stop-hook mac-mini-directive false positive bb1c194, lotto-calc base mismatch 5ed284b)
  • daejong-page 3 commit: todos 스냅샷 2회 + 추가 todo(Tuya 에어컨 IR 등록)
  • ~/todo 2 commit: D11 brainstorming + notebook3060 role 승격 신규, Tuya 에어컨 IR 등록 추가
  • simple_memo_app 16 commit: 위 자율루프 표 + 종료 마커

학습·상담

  • 형님 “FEDA 같은 시스템 구축 거의 되가는거지?” → JARVIS-like 시스템 비유 해석 + 현재 70~80% 진척 답변. 부족 부분: 음성 인터페이스, ambient 인지, 시각 통합 대시보드(큐 대시보드가 시작점).
  • 형님 “마이너스베타스튜디오 회사 이메일 팔 수 있어? 블라인드 새회사 등록하려는데” → Cloudflare Email Routing 무료 옵션 surface. minusbetastudio.com 추가 등록 옵션 vs kangdaejong.com 단일 → 단일 선택, 블라인드 인증은 사업자등록증 추가 첨부로 시도 예정.

남은 작업

  • Task #7 FastAPI 큐 대시보드 phase 1 — ~/todo/ 파서 + 모바일 HTML 렌더 + stale/promote/skip 액션 + write-back/git commit. Mac mini 배포. ~2-3h 예상, 별 사이클.
  • Task #8 lotto-calc PR #17 fresh ack + squash 머지 — 형님 ack 대기.
  • Email Routing(daejong@kangdaejong.comssamssae@naver.com forward) — 별 사이클 ~5분.
  • 블라인드 가입 + 회사 인증 — Email Routing 셋업 후, 사업자등록증 첨부.
  • origin/main lotto_history_seed_test 별 PR — assets/lotto_history.json 누락 fix.
  • 메모요 sync 재개 보류 — 형님이 Firebase 프로젝트 만들고 크레덴셜 두 파일 배치하면 launchctl bootstrap 한 줄로 복귀.

관련 커밋

repoSHA메시지
simple_memo_appa5eee9ddocs(sync): 자율 루프 종료 마커 박음 (2026-05-17 KST)
simple_memo_app54b38cadocs(sync): 자율 루프 중단 마커 + 다음 추천작업 박음
claude-automations60070c9fix(hook): mac-report-reverse-reply grep list 에 mac-mini-directive.sh 추가
claude-skills5ed284bauto: skills update (issues/2026-05-17-lotto-calc-pr16-stale-base-mismatch)
claude-skillsbb1c194auto: skills update (issues/2026-05-17-stop-hook-mac-mini-directive-not-detected)

메모리 갱신

  • project_memoyo_sync_loop_2026_05_17.md — status: terminated, 종료 절차 + 진척 상세 inline
  • project_kangdaejong_domain_cf_infra_2026_05_17.md — 신규, 도메인+CF Tunnel+Access 인프라 박제
  • MEMORY.md 인덱스 갱신