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
85d7af9fix(launchd): bootstrap API + 등록 검증 + 훅 로드 여부 감지 - skills
a02c924issue: launchd-silent-job-dropout 재발 (2026-04-22) + 강화된 forcing function - daejong-page
a524d3aissue 공개본 동기화 (ssamssae.github.io/daejong-page/issues.html)
- automations
- forcing function: 다음에 같은 증상 나오면 bootstrap API 재호출 + 등록 검증 루틴이 돌아가게 됨.
07:22 stop-check 훅 시그널 노이즈 제거
~/.claude/hooks/stop-check-repos-dirty.sh가 untracked 파일(??) 까지 경고해 노이즈가 너무 많았음.- 수정:
- untracked (
??) 는 스킵 (modified/staged 만 경고) dirty-ignore.txtblacklist 파일 추가 (경고 제외 repo 지정 가능)
- untracked (
- 커밋: automations
6d35dcd.
07:47 memory auto-push PostToolUse hook
~/.claude/projects/-Users-user/memory/폴더는ssamssae/claude-memoryprivate 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 — 풀 리디자인 (검정/노랑 → 화이트+토스 블루)
22:40 landing backlink 추가
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/#8B95A1scale on light - tag colors → Toss 팔레트 (blue/green/purple/orange)
- shadow alpha 0.4 → 0.08 (light bg 맞춤)
- font → Pretendard CDN + font-family 프리펜드
- bg
- 일괄 적용 페이지:
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#F2F4F6border - (토스 앱 카드 느낌)
- 커밋: 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 이후만)
| repo | SHA | 시간 | 메시지 |
|---|---|---|---|
| claude-automations | 21f6e61 | 07:02 | report: 2026-04-22-mac.json |
| claude-automations | 85d7af9 | 07:04 | fix(launchd): bootstrap API + 등록 검증 + 훅 로드 여부 감지 |
| claude-skills | a02c924 | 07:08 | issue: launchd-silent-job-dropout 재발 + 강화된 forcing function |
| daejong-page | a524d3a | 07:09 | issue: launchd silent dropout 재발 공개본 동기화 |
| apps/hanjul | 59b47e3 | 07:11 | style: write_screen counter padding → AppSpacing.xs |
| apps/hanjul | 7ddbcd3 | 07:11 | chore(ios): pod install 결과 커밋 |
| claude-automations | 6d35dcd | 07:22 | hook: stop-check — skip untracked + blacklist file |
| daejong-page | b291acf | 07:44 | todos: 3건 추가 (한줄일기/Instagram/포모도로) |
| claude-automations | e69e163 | 07:47 | Add memory-auto-push PostToolUse hook |
| daejong-page | 213a2fc | 07:47 | todos: 심사레이더 정리 |
| apps/hanjul | 2d12175 | 08:06 | docs: 2026-04-22 design audit |
| claude-skills | 66fd04e | 08:36 | Add handoff skill |
| apps/hanjul | 41befd6 | 09:10 | feat: A2 dawn-sky + B2 heatmap hybrid design |
| daejong-page | 3ccdf12 | 09:20 | todos: 사이드 추가 — 단어장 앱 |
| apps/hanjul | 0e08628 | 21:25 | fix(ai): 오프라인 스텁 negation 처리 |
| apps/hanjul | 3ed99d8 | 22:02 | feat: drop APP_SHARED_SECRET, layered rate limits |
| apps/hanjul | 85a2afe | 22:15 | chore(worker): commit RL KV namespace id |
| daejong-page | 17d62a5 | 22:40 | feat: landing backlink — nav-fab 맨 앞 + 이름 옆 텍스트 |
| daejong-page | 4e9f9e8 | 23:21 | redesign: Toss 톤 전면 개편 (검정/노랑 → 화이트/블루) |
| daejong-page | fcf89d9 | 23:28 | home: 아이콘 배치 리디자인 — 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 이 두 번째 실사용)