목표
decoded의 데이터 파이프라인을 단일 Supabase(prod)에서 assets(신규, 파이프라인 스테이징)와 prod(검증본 전용) 두 프로젝트로 분리한다.
핵심 설계 결정
- 두 프로젝트 완전 독립 — cross-ID 참조 없음 (prod.posts에 raw 참조 X)
- "검증(verify)" 이 최종 액션 — admin이 COMPLETED raw_post 승인 시
assets.status=VERIFIED + prod.posts INSERT 한 번에. "승격(promote)" 개념 없음
- 중복 방지는 admin 운영 책임 (DB UNIQUE 없음)
- 상태머신 5개:
NOT_STARTED / IN_PROGRESS / COMPLETED / VERIFIED / ERROR
- 로컬 개발: 로컬 Supabase = prod 역할, cloud assets는 공유.
APP_ENV=local 시 assets write skip
- prod warehouse 완전 드롭, entity 테이블은 public으로 rename
- R2 버킷은 그대로 공유
Child 이슈 체크리스트
머지 전략
브랜치 feature/assets-project-split 단일 — 위 이슈 순서대로 커밋 단위로 쌓고, 단일 메가 PR 로 머지. PR 본문에 Closes #334 ... Closes #343 나열 → 일괄 close.
배포 순서 (prod downtime ~60-90s)
- assets 프로젝트 생성 + 초기 스키마
- ai-server ARQ 워커/스케줄러 중단 (writer freeze)
- prod drop 마이그레이션 적용 (PITR 스냅샷 후)
- api-server 배포 (신규 코드 + ASSETS_* env)
- ai-server 배포 (신규 env)
- web 배포
리스크
- cloud assets 장애 → raw_posts 엔드포인트 503, posts CRUD는 영향 없음 (pool 분리)
- drop 마이그레이션 오류 → 단일 트랜잭션 + PITR 7일 보관 (수동 snapshot 권장)
- 이전 api-server 롤백 불가 → warehouse.raw_posts 없어서 500. 앞으로만 수정 원칙
🤖 Generated with Claude Code
목표
decoded의 데이터 파이프라인을 단일 Supabase(prod)에서 assets(신규, 파이프라인 스테이징)와 prod(검증본 전용) 두 프로젝트로 분리한다.
핵심 설계 결정
assets.status=VERIFIED+prod.posts INSERT한 번에. "승격(promote)" 개념 없음NOT_STARTED / IN_PROGRESS / COMPLETED / VERIFIED / ERRORAPP_ENV=local시 assets write skipChild 이슈 체크리스트
머지 전략
브랜치
feature/assets-project-split단일 — 위 이슈 순서대로 커밋 단위로 쌓고, 단일 메가 PR 로 머지. PR 본문에Closes #334...Closes #343나열 → 일괄 close.배포 순서 (prod downtime ~60-90s)
리스크
🤖 Generated with Claude Code