← 작업일지

2026-04-22 · v1.0.1

2026.04.22 작업일지 v1.0.1

v1.0.0 이후 하루가 한 번 더 풀렸다. 아침에 launchd 가 또 조용히 죽었고, 저녁엔 hanjul 서버 보안·daejong-page 디자인을 동시에 갈아엎었다. handoff / memory auto-push / stop-check blacklist / iOS 홈스크린 3×3 그리드까지 전선 4개.

오늘의 궤적 (v1.0.0 이후)

v1.0.0 을 아침 7시 47분 경에 묶었다. 그 직전부터 launchd 의 일부 job 이 또 조용히 사라진 게 발견돼서 포스트모템을 재작성하고, memory auto-push hook·stop-check blacklist 같은 작은 방어선까지 한 번에 붙였다. 이어서 hanjul 디자인 audit (A/B 비교), 구현된 것은 A2+B2 하이브리드 1294줄 추가. 낮엔 todos 정리와 handoff 스킬 도입. 저녁엔 hanjul 서버 측 APP_SHARED_SECRET 을 드롭하고 layered rate limit 로 재설계. 마무리로 daejong-page 전체 페이지(15개 HTML) 를 검정/노랑에서 화이트+토스 블루로 전면 리디자인하고 홈을 iOS 홈스크린 3×3 그리드로 재배치.

인프라 — launchd silent dropout 재발

07:02-07:09 발견 & 대응

  • 어제(04-21) 기록해 둔 launchd-silent-job-dropout 이슈가 오늘 아침에 또 재발.
  • 증상: launchd 가 job 은 등록된 것처럼 보이는데 실제로 훅/잡이 안 돌아감. launchctl list 조차 어긋남.
  • 대응 커밋:
    • automations 85d7af9 fix(launchd): bootstrap API + 등록 검증 + 훅 로드 여부 감지
    • skills a02c924 issue: launchd-silent-job-dropout 재발 (2026-04-22) + 강화된 forcing function
    • daejong-page a524d3a issue 공개본 동기화 (ssamssae.github.io/daejong-page/issues.html)
  • forcing function: 다음에 같은 증상 나오면 bootstrap API 재호출 + 등록 검증 루틴이 돌아가게 됨.

07:22 stop-check 훅 시그널 노이즈 제거

  • ~/.claude/hooks/stop-check-repos-dirty.sh 가 untracked 파일(??) 까지 경고해 노이즈가 너무 많았음.
  • 수정:
    • untracked (??) 는 스킵 (modified/staged 만 경고)
    • dirty-ignore.txt blacklist 파일 추가 (경고 제외 repo 지정 가능)
  • 커밋: automations 6d35dcd.

07:47 memory auto-push PostToolUse hook

  • ~/.claude/projects/-Users-user/memory/ 폴더는 ssamssae/claude-memory private repo 와 sync 중이었는데, 메모리 write/edit 후에 수동 push 를 잊는 게 반복.
  • 해결: PostToolUse 훅에서 Write/Edit 가 memory 폴더를 건드리면 자동으로 pull → commit → push.
  • 이벤트 기반, 토큰 0. Claude 가 메모리 쓸 때마다 git 동기화는 훅이 알아서 함.
  • 커밋: automations e69e163.

스킬 — /handoff 신설

08:36 WSL↔Mac 크로스 디바이스 프롬프트 복붙 포맷

  • 배경: 평소에 “이건 맥에서 해” 같은 지시를 텔레그램으로 내가 복붙해서 맥 세션에 전달. 그런데 분석/설명 문장과 directive 가 한 메시지에 섞이면 복사할 때 범위 선택이 귀찮음 (폰에서 long-press 로 블록 잡기 어려움).
  • 신규 스킬 /handoff:
    • 분석/근거 메시지와 분리해서 directive 전용 메시지 를 별도로 Telegram reply.
    • 복붙 단위별로 메시지 쪼갬 (드래그 최소화).
    • 각 directive 는 self-contained — 새 채팅창 첫 메시지 전제.
  • 커밋: skills 66fd04e.
  • 트리거: “맥에 시켜”, “WSL 로 넘겨”, “handoff”, “/handoff”.

hanjul (한줄일기) — 디자인 A/B 사이클

08:06 design audit 문서화

  • Mac 에서 A/B 디자인 사이클을 돌리기 위한 prep. 어떤 방향으로 갈지 3안 정리.
  • 커밋: hanjul 2d12175.

09:10 A2 dawn-sky + B2 heatmap hybrid 구현 (1294줄)

  • 선택: A2 (dawn-sky 그라데이션 + glass card) + B2 (53w×7d 히트맵 + milestones) 하이브리드.
  • 변경 파일:
    • theme.dart — dawn/night palette + AppGradients.dawn + B2 heat scale (34줄 +)
    • home_screen.dart — gradient bg + glass cards + time-of-day prompt + moon AI bubble (567줄 rewrite)
    • stats_screen.dart (신규) — 53w×7d heatmap + milestones(days/streak/longest) + day flyout (553줄)
    • root_shell.dart (신규) — BottomNav(오늘/통계) with IndexedStack (102줄)
    • common/time_slot.dart (신규) — DAWN/DAY/DUSK/NIGHT 슬롯 helper (35줄)
    • write_screen.dart — 유지 (토스 clean write surface 그대로)
  • 브랜드 블루 CTA 는 today 카드 버튼에 유지.
  • 커밋: hanjul 41befd6.

21:25 AI 스텁 negation 버그 픽스

  • 문제: “안좋다”, “좋지 않” 같은 부정 구문을 positive 로 분류하던 버그. 오프라인 스텁(서버 없이 로컬로 감정 분류) 에서 negation 을 안 읽어서.
  • 수정: 부정 구문 패턴 매칭 추가 → 올바르게 negative 로 분류.
  • 커밋: hanjul 0e08628.

22:02 서버 보안 — APP_SHARED_SECRET 드롭 → layered rate limits

  • 배경: Claude Code harness 가 “agent 가 app secret 을 외부 URL 빌드 명령에 주입” 플로우를 거부 (memory: feedback_harness_secret_url_build.md). settings allow 추가도 차단.
  • 결정: 에이전트가 건드릴 수 없는 secret 을 계속 들고 가는 대신, app-gate 자체를 버리고 worker 쪽 rate limit 을 강화.
  • Worker 변경:
    • APP_SHARED_SECRET / X-App 헤더 제거
    • per-IP daily cap 60 (CF-Connecting-IP 기반) — X-Device-Id 로테이션 우회 방지
    • 기존 per-device cap + per-minute burst + MONTHLY_TOKEN_BUDGET 은 유지
  • Client (ai_service.dart):
    • _appSecret / X-App 제거
    • _proxyUrl 공개 const 로 변경 (기본 ssamssae.workers.dev/reply, staging 은 --dart-define 오버라이드)
  • 커밋: hanjul 3ed99d8.
  • 결과: 에이전트 오케스트레이션 가능 + 월간 최대 노출은 여전히 budget 으로 캡.

22:15 RL KV namespace id 커밋

  • worker 의 rate-limit KV namespace ID 를 config 에 고정. 이제 어느 기기에서 deploy 해도 같은 KV 를 씀.
  • 커밋: hanjul 85a2afe.

daejong-page — 풀 리디자인 (검정/노랑 → 화이트+토스 블루)

  • ssamssae.github.io (랜딩) → ssamssae.github.io/daejong-page 만 있었는데, 역방향 링크가 없어서 daejong-page 에서 랜딩으로 돌아갈 길이 없었음.
  • 추가:
    • nav-fab 맨 앞에 랜딩 버튼
    • 이름 옆 텍스트 링크 병기
  • 커밋: daejong-page 17d62a5.

23:21 Toss 톤 전면 개편 (15개 페이지 일괄)

  • 배경: 기존 검정/노랑(#121212/#ffd54f) 톤이 현재 작업 성격과 안 맞음 (feedback: feedback_daejong_page_design_tone.md — 토스 톤 명시적 선호).
  • 팔레트 전환:
    • bg #121212/#1a1a1a#FFFFFF/#F9FAFB
    • accent #ffd54f (yellow) → #3182F6 (Toss blue)
    • text light-grays-on-dark → #191F28/#4E5968/#8B95A1 scale on light
    • tag colors → Toss 팔레트 (blue/green/purple/orange)
    • shadow alpha 0.4 → 0.08 (light bg 맞춤)
    • font → Pretendard CDN + font-family 프리펜드
  • 일괄 적용 페이지: index, worklog, todos, done, cancelled, newsletter, portfolio, skills, timeline, issues, privacy 3종, worklog view, newsletter view = 15개.
  • done.html 히트맵 레벨 재정렬 (lv4 가장 deep 하게).
  • 커밋: daejong-page 4e9f9e8.

23:28 홈 — iOS 홈스크린 + 토스 메뉴 3×3 그리드

  • 상단 모서리 FAB 3개(email/카톡/응원) 제거 → 이름/bio 아래 contact-row 로 통합 (38px 소프트그레이 칩, hover 시 브랜드 블루 틴트).
  • 하단 단일 행 9개 아이콘 → 3×3 menu-grid:
    • 타일: 42px 아이콘 + 11.5px 라벨
    • hover 시 lift + 블루 틴트 심화
  • card 프레임:
    • padding 48/40 → 40/32
    • shadow 0 8px 32px(.08)0 2px 24px(.04) + 1px #F2F4F6 border
    • (토스 앱 카드 느낌)
  • 커밋: daejong-page fcf89d9.

todos 정리 (하루 동안 누적)

  • 07:44 — 3건 추가: 한줄일기 UI 고도화 / Instagram 자동포스트 / 포모도로 Closed Testing
  • 07:47 — 심사레이더 정리 (3건 완료 처리 + v0.2 방향 결정 항목으로 구체화)
  • 09:20 — 사이드 추가: 단어장 앱 (브레인스토밍 예정)
  • 23:12 — 저녁 auto-sync

관련 커밋 (v1.0.0 이후만)

repoSHA시간메시지
claude-automations21f6e6107:02report: 2026-04-22-mac.json
claude-automations85d7af907:04fix(launchd): bootstrap API + 등록 검증 + 훅 로드 여부 감지
claude-skillsa02c92407:08issue: launchd-silent-job-dropout 재발 + 강화된 forcing function
daejong-pagea524d3a07:09issue: launchd silent dropout 재발 공개본 동기화
apps/hanjul59b47e307:11style: write_screen counter padding → AppSpacing.xs
apps/hanjul7ddbcd307:11chore(ios): pod install 결과 커밋
claude-automations6d35dcd07:22hook: stop-check — skip untracked + blacklist file
daejong-pageb291acf07:44todos: 3건 추가 (한줄일기/Instagram/포모도로)
claude-automationse69e16307:47Add memory-auto-push PostToolUse hook
daejong-page213a2fc07:47todos: 심사레이더 정리
apps/hanjul2d1217508:06docs: 2026-04-22 design audit
claude-skills66fd04e08:36Add handoff skill
apps/hanjul41befd609:10feat: A2 dawn-sky + B2 heatmap hybrid design
daejong-page3ccdf1209:20todos: 사이드 추가 — 단어장 앱
apps/hanjul0e0862821:25fix(ai): 오프라인 스텁 negation 처리
apps/hanjul3ed99d822:02feat: drop APP_SHARED_SECRET, layered rate limits
apps/hanjul85a2afe22:15chore(worker): commit RL KV namespace id
daejong-page17d62a522:40feat: landing backlink — nav-fab 맨 앞 + 이름 옆 텍스트
daejong-page4e9f9e823:21redesign: Toss 톤 전면 개편 (검정/노랑 → 화이트/블루)
daejong-pagefcf89d923:28home: 아이콘 배치 리디자인 — iOS 홈스크린 + 토스 메뉴 톤

배운 것

  • 재발하는 이슈는 forcing function 을 매번 강화해야 막힌다. 포스트모템만 쓰고 끝나면 세 번째 재발이 온다.
  • harness 가 특정 플로우를 거부할 때는 우회 말고 구조를 바꿔라 — 이번 경우 secret 을 들고 다니는 대신 레이트리밋으로 치환.
  • 디자인 개편은 팔레트 한 토큰 바꾸는 게 아니라 shadow alpha·font·tag color 까지 연쇄해야 톤이 맞음 (.4 그림자를 .08 로 내리지 않으면 화이트 배경에서 탁해 보임).
  • 홈 레이아웃은 “앱처럼” 보이려면 FAB/여백/아이콘 크기를 iOS 기준으로 재측정해야 한다 — 웹 감각으로 배치하면 어색함.

남은 작업

  • memoyo (메모요) beta 트랙 재시도 — testers 그룹 선행 구성 필요
  • hanjul Play Console / App Store 등록 검토
  • hanjul design cycle 유저 피드백 수렴 후 미세 조정
  • /goodnight 실사용 피드백 누적 (v1.0.1 이 두 번째 실사용)