← 작업일지

2026-06-02 · v1.0.1

작업일지 2026-06-02 (v1.0.1)

v1.0.0(굿나잇 시점)에 저녁 증분을 더한 갱신본. 첫이름 풀빌드 본문은 v1.0.0과 동일, 마지막 “저녁 추가” 섹션이 신규.

한 줄 요약

첫이름(cheotireum) AI 사주작명 서비스를 mock 껍데기에서 실엔진 + 이메일 OTP + 토스 결제 + 결과 PDF 메일까지 풀빌드해 테스트모드 production 까지 라이브. 밤늦게 아니키가 새 디자인 방향(vrl-benchmark 다크 톤)과 favicon 버그, 초소 작전보드 큐 문제를 던져 코덱스 위임으로 이어감.

첫이름(cheotireum) 풀빌드 — 메인 트랙

구현 (WSL codex 노드, PR #2~#6)

  • Worker: /api/preview(결정론 엔진, 무료 맛보기), 이메일 OTP request/verify, Toss /api/confirm, /api/result/:orderId 폴링, Queue consumer, Resend PDF 결과메일, /api/resend(KV 120초 dedupe).
  • Flutter: ResultScreen 실엔진 preview, Pricing OTP 게이트, checkout/sessionStorage 브리지, PaidResultScreen 폴링, 프리미엄 로딩 카드.
  • 결제 페이지: checkout.html Toss 결제창, success.html confirm POST + /#/result redirect.
  • 환불정책: 디지털 즉시제공 → 단순변심 환불불가, 강조박스 + 필수 동의 체크박스.
  • PDF: 동기 buildPremiumReportPdf 계약 유지, Pretendard 임베딩, CJK-safe separator, text fill color.

리뷰·수정 (맥미니 codex-fire 오케스트레이션)

  • success.html amount 문자열 → 숫자 정규화, processing 상태 성공 처리.
  • /api/resend 멱등성 gap → KV dedupe.
  • PDF viewer-resident CJK 폰트 의존 → Pretendard 임베딩.
  • PR #2~#5 main 머지, PR #6(프리미엄 톤 + 폰트 임베딩) 진행.

배포 게이트

  • CF token KV write 권한(code 10023) 보강.
  • 테스트모드 production 배포: Worker 100% traffic, cheotireum.kangdaejong.com 200 OK. OTP=테스트 발신주소, Toss=sandbox.
  • 토스 심사 준비: 결제경로 PPT + 사업자등록 대조 PASS + 스크린샷.

본진 검증 (실측)

  • 라이브 200, /api/preview 정상(후보 3개). 빈/잘못된 payload 의 500(1101)은 계약 오해, 정확한 NamingRequest로 재호출 → 200 정상.
  • 메모리 충돌 해소: 맥미니 “도메인 미인증 403”은 인증 전 stale, Resend API 실측 → cheotireum.kangdaejong.com verified.

아니키 게이트 (보류)

  • 실 OTP 발신주소 전환 + 실 OTP E2E(외부발신), 실 Toss 키 cutover, 시각 확인.

autopilot 사이드 트랙 (PR 머지 게이트 대기)

  • 약먹자 #15(cold-start), 로또계산기 #21(iOS 흰화면), 더치페이 #14(카톡공유), 메모요 #49(법적문서)/#50(iOS 내보내기). 기기검증 갭 플래그 → 일괄 머지 보류.

인프라

  • Claude Code 2.1.159 → 2.1.160(본진 + 맥미니, 재부팅 후 확인). DISABLE_AUTOUPDATER=1 유지.
  • automations: tmux-claude plist exec → ~/.npm-global/bin/claude.

저녁 추가 (v1.0.1 신규, 23:20~23:30 KST)

굿나잇 직후 아니키가 자기 직전 세 건을 던졌다.

  • 첫이름 다크 톤 대안 시안: work.kangdaejong.com/vrl-benchmark.html(토스/Linear 풍 다크 #0F1115 + 블루 #4D94FF) 톤으로 만들어보자는 제안 + “코덱스 시켜봐”. 다만 첫이름은 이미 green-cream 프리미엄 톤 + 명조(PR #7 머지 대기)로 다듬어진 상태 — 정반대 방향. 무지성 전면 교체 대신 기존 톤 보존 + 별 브랜치 “대안 시안” 프리뷰로 codex-fire 발사(맥미니 codex 서브 오케스트레이터, 본진 Anthropic 토큰=kickoff 1턴). 두 톤 비교 후 선택하는 흐름. tasks.md T-260602-04.
  • favicon 버그: 첫이름 탭 아이콘이 Flutter 기본 파란 V(스크린샷) → 브랜드 아이콘 교체를 같은 codex directive에 묶음.
  • 초소 작전보드 큐: queue.kangdaejong.com 작전보드에서 전체 큐가 안 보이는 문제 → codex-mesh-vote 요청. 그런데 방금 codex-fire가 맥미니 codex REPL을 점유해 같은 REPL에 mesh-vote를 박으면 첫이름 작업이 잘리는 충돌 → 무지성 발사 대신 (a)claude 메시보트 지금 / (b)코덱스 순차 옵션을 surface, 아니키 답 대기.

배운 것

  • 빈/잘못된 payload 의 500을 “production 고장”으로 단정하지 말 것. 정확한 계약으로 재호출이 먼저.
  • 노드 negative 단정(“미인증”)은 stale 일 수 있다 — 본진 SoT(API/실측)로 교차검증.
  • 동시 위임 시 같은 codex REPL 점유 충돌을 인지 — 무지성 동시 발사 대신 surface.