o2o-infinith-demo/docs/NEXT_SESSION_SUPPORTERS_AUTOBUILD_v3.md
2026-09-08 11:21:57 +09:00

8.8 KiB

다음 세션 프롬프트 v3 · "병원 이름 하나로 진단 리포트와 서포터즈 사이트까지"

작성 2026-09-08 · 작성자 Claude (haewon 세션 핸드오버) · v2(09-07)를 대체한다. v2 §3 판단 분해표·§4 근거 프로토콜·§5 신뢰 층·§6 병원 입력·§11 진행 기록·§12 결정은 그대로 유효하므로 그 부분은 v2를 참조한다. v1(09-04)은 자산 위치·함정 참조용.


0. 세션 시작 시 그대로 붙여 넣을 프롬프트

INFINITH 저장소, 브랜치 feature/supporters-autobuild, 워크트리 ~/orca/workspaces/INFINITH/Productize 에서 "AI Discovery 자동 빌드"를 이어서 개발한다.
지금 상태: 병원 이름 또는 URL 하나로 채널 발견·엔티티 검증 → 근거 수집 → 팩트 시트 → 유튜브·로고 → 이미지(의료법 기준) → 첫 배치 기획 → GPT-4.1 글 생성(게이트·수치 대조·근거 대조) → Astro 빌드·발행 게이트 → Vercel 미리보기(noindex)까지 워커 한 번으로 돈다.
뷰성형외과(정답지 18편 회귀 18/18)와 원진성형외과(이름만 입력, 6/6편, https://supporters-wonjin.vercel.app)에서 사람 개입 0으로 완주했다. 진단 리포트는 /discovery/:id 와 docs/reports/<clinic>/01_readiness_report/*.html·pdf.

먼저 읽는다.
1. docs/NEXT_SESSION_SUPPORTERS_AUTOBUILD_v3.md (이 문서. §2 남은 일과 §3 결정 대기)
2. docs/NEXT_SESSION_SUPPORTERS_AUTOBUILD_v2.md §3·§4·§6·§11-5~§11-12 (규칙·근거 프로토콜·병원 입력·진행 기록)
3. workers/supporters-build/README.md, supporters/briefs/README.md, docs/INFINITH_Supporters_Image_Rules.md
4. docs/INFINITH_AI_Discovery_Retrospective_2026-09-08.md (회고. 왜 이렇게 만들었는지)

원칙: 근거 없는 사실은 생성하지 않는다("확인 대기"). 사람 게이트(의학 검토·게시 승인·채널 확인 필요·이미지 육안 확인)는 자동화하지 않는다. 고객 화면에 운영자 설명을 쓰지 않는다. 확정된 룩앤필은 텍스트만 바꾼다. 존댓말, 엠대시 금지, 은유 금지.
결정이 필요한 것은 §3을 보고 haewon 에게 묻는다.

1. 지금 되는 것 (한 줄씩)

단계 명령·파일 상태
채널 발견·엔티티 검증 supporters/scripts/discover_channels.mjs (이름만으로 홈페이지도 찾음) 원진 9플랫폼 중 8 CONFIRMED
근거 수집 supporters/scripts/collect_evidence.mjs (브라우저 UA, 슬래시 미강제, 404 재시도) 뷰 223p · 원진 216p
자동 채점·리포트 scripts/audit_aeo_geo.pysrc/data/discovery_<id>.ts/discovery/:id · scripts/build_discovery_report.ts → HTML/PDF 뷰 AEO 42/GEO 56 · 원진 AEO 15/GEO 45
유튜브·로고 collect_youtube.mjs, 워커 youtube 단계, 고정값 supporters/briefs/<id>/clinic.json 원진 736편 집계, @wjwonjin 고정
이미지 collect_images.mjs + img_process.py, 규칙 docs/INFINITH_Supporters_Image_Rules.md 원진 66장
기획·생성·게이트 default_briefs.mjsgenerate_posts.mjs(gen/) → gate/rules.mjs·check.mjs(테스트 16/16) 편당 약 $0.09
워커·큐·승인 UI workers/supporters-build/run.mjs·poll.mjs, supporter_builds·supporter_inputs, ClinicInputsPanel(/discovery/:id·/supporters/:id) 라이브. 폴러는 미설치
입력 반영 apply_inputs.mjs (검토·승인 → frontmatter, 자유 답변 → clinicAnswers 근거 [A]) dry-run 검증
미리보기 supporters-viewclinic.vercel.app · supporters-wonjin.vercel.app (noindex) 배포됨

2. 남은 일 (권장 순서)

  1. 뉴스룸 단계: supporters/scripts/build_news.py(홈페이지 언론 게시판 + 네이버 뉴스 API, 부정 기사 제외)를 워커 단계로. 원진은 게시판 위치부터 확인. 병원 무관 기사 본문 관련성 필터(v2 §8 미반영) 포함.
  2. 감사 재실행 단계(Phase 9): 색인 허용 빌드를 로컬에서 audit_aeo_geo.py로 다시 채점해 공식 vs 서포터즈 비교표를 리포트 카드에. scripts/build_supporters_audit_xlsx.py 로직 재사용.
  3. 수동 실측 항목 채우기(원진): 강남언니 2500·바비톡 3143·GBP·네이버 플레이스 NAP 대조(D1·D2·D4·D5). 실측하면 GEO 점수가 바뀐다. 리포트 재생성은 npx esbuild scripts/build_discovery_report.ts ... && node report.mjs --id wonjin ... + Chrome PDF (v2 §11 명령 참조).
  4. 워커 상시 실행: Mac launchd 폴러 설치(workers/supporters-build/launchd/) 또는 Trigger.dev 이관(가입·키만 haewon). 랜딩 URL 신청 → 큐 → 자동 빌드가 이어지려면 이게 필요하다.
  5. 병원 송부 전 사람 확인: 원진 이미지 갤러리 육안 확인(얼굴·신체 검출 없음), "확인 필요" 채널 12건 판정, 쇼츠 정리 답(사람이 영상 보고 한 문단).
  6. 검토 파이프라인: 병원이 /supporters/wonjin 폼에 입력 → run.mjs --from data --from-supabase --deploy --build-id 87cb75a2-2037-4cbb-ae27-c06e39f022e8 재빌드. 이 재빌드도 폴러가 자동으로 집게 하려면 supporter_inputs insert 트리거를 큐에 연결.
  7. 뷰성형외과 자동 빌드 미리보기(supporters-viewclinic)를 수작업 샘플(view-supporters-sample) 수준으로: 뷰는 자막·쇼츠 답이 사람 작업이라 격차가 있다. 자막 파이프라인(v1 §6, IP 차단 대비)이 붙어야 좁혀진다.
  8. 세 번째 병원 회귀(data/clinic_social_registry.json 73곳 중 선택). 사이트마다 새 편차가 나온다는 전제로.

3. haewon 결정 대기

  1. 원진 "확인 필요" 채널 12건 중 병원 것(영문 채널 Wonjin Plastic Surgery Korea, WONJIN_OFFICIAL 등)을 사이트에 연결할지.
  2. 지원 관계 고지 문구(site.sponsorNotice)를 켤지와 문안. 켜면 글 첫 부분에 노출되고 게이트가 필수 검사로 바뀐다(v2 §12-2).
  3. 워커 상시 실행 위치(Mac 폴러 설치 vs Trigger.dev 가입).
  4. 원진에 미리보기·리포트 송부 시점과 병원 입력 담당자.
  5. 경영진 미결 그대로: 도메인(별도 vs 서브도메인), POC 범위·가격, 서포터즈 실존 개인 모집.

4. 이번 세션들(09-07 세션 3 ~ 09-08)에서 확정한 것

  • 채널 인기 전체 탭 제거 · 단가 상한 실행당 $10 · 두 번째 병원 원진 · 유튜브 기준 채널 @wjwonjin · 이미지는 의료법 기준 조건부 제외(전후·사례·모델·비교·수상·수술 장면·신체 실사) · 병원별 고정값 파일 supporters/briefs/<id>/clinic.json.
  • 랜딩 SampleReport 라벨 "SAMPLE REPORT · 실제 사례". URL 신청 → supporter_builds 큐. /supporters/:id 페이지.

5. 함정 (v1 §6·v2 §8에 추가)

  • 사이트 편차 3종(원진): 비브라우저 UA 403, 경로 끝 슬래시 404, 주의사항·안전 페이지 없음. "한 병원에서 되는 코드"는 회귀 전까지 코드가 아니다.
  • 역링크 판정은 경로 경계까지. 부분 문자열이면 변형 핸들이 전부 확인됨으로 잡힌다.
  • 투명 PNG는 흰 배경으로 평탄화한 뒤에 글자 이미지 검사. 순서가 바뀌면 장식 오브젝트가 통과한다.
  • 모델 근거 대조기는 "근거에 있다"고 적으면서 플래그를 세운다. 항목별 supported 판정으로 거른다.
  • 게이트는 영상 제목도 본다. "부작용은 없을까?" 제목이 홈·영상 페이지에서 배포를 막았다. 수집 단계에서 같은 규칙으로 거른다.
  • 인터넷이 끊기면 생성 단계가 fetch failed 로 멈춘다. --from generate 로 재개.
  • node --experimental-strip-types 는 확장자 없는 import 를 못 푼다. TS 스크립트는 esbuild 번들로 돌린다.

6. 자주 쓰는 명령

# 새 병원 전체 (이름·URL·로고)
node workers/supporters-build/run.mjs --clinic <id> --url <홈> --name <상호> --logo <svg> --deploy --build-id <supporter_builds.id>
# 특정 단계부터 (evidence data discover youtube images inputs briefs generate build deploy)
node workers/supporters-build/run.mjs --clinic <id> --url <홈> --work ~/supporters-builds/<id> --from <단계> --deploy --build-id <id>
# 큐 비우기 / 상주
node workers/supporters-build/poll.mjs [--loop 300]
# 게이트 테스트 · 뷰 정답지 회귀 · 템플릿 내보내기 (supporters/)
npm run gate:test · npm run generate:regress · npm run export:template
# 진단 리포트 HTML/PDF
npx esbuild scripts/build_discovery_report.ts --bundle --platform=node --format=esm --outfile=/tmp/report.mjs && node /tmp/report.mjs --id <id> --out <html> --status ~/supporters-builds/<id>/status.json --site ~/supporters-builds/<id>/site --briefs ~/supporters-builds/<id>/briefs.json
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless=new --no-pdf-header-footer --virtual-time-budget=8000 --print-to-pdf=<pdf> file://<html>