# 다음 세션 핸드오버 · 2026-09-11 · 오라클피부과 서포터즈 (피부과 첫 자동 빌드) 작성 2026-09-10 · 작성자 Claude (haewon 세션) · 이전 핸드오버 `docs/NEXT_SESSION_2026-09-09.md`, 자동 빌드 전체 상태 `docs/NEXT_SESSION_SUPPORTERS_AUTOBUILD_v3.md`. 이 문서는 2026-09-10 피부과 작업(세션 1: PRD·질문뱅크·Top3 진단, 세션 2: 오라클 자동 빌드)만 다룬다. ## 0. 세션 시작 시 붙여 넣을 프롬프트 ``` INFINITH 저장소. 자동 빌드 코드는 워크트리 ~/orca/workspaces/INFINITH/Productize (브랜치 feature/supporters-autobuild), 피부과 PRD·질문뱅크·진단·Before/After 는 메인 체크아웃 ~/Claude/Agentic Marketing/INFINITH (브랜치 feature/ai-sentiment-rubric) 에 있다. 둘 다 미커밋. 먼저 docs/NEXT_SESSION_2026-09-11_ORACLE.md 를 읽고 §3 결정 대기의 답을 받은 뒤 §2 순서대로 진행한다. 원칙: 근거 없는 사실은 생성하지 않는다("확인 대기"). 사람 게이트(의학 검토·게시 승인·이미지 육안·채널 확인)는 자동화하지 않는다. 고객 화면에 운영자 설명 없음. 확정 디자인은 텍스트만. 존댓말, 엠대시 금지, 은유 금지, 흰 배경 위 연보라 텍스트 금지(인디고 #1D0024). 세 병원을 한 화면에서 비교하는 산출물은 만들지 않는다. ``` ## 1. 2026-09-10 에 끝낸 것 | 일 | 위치 | 상태 | |---|---|---| | 피부과 Top3 리서치(오라클·톡스앤필·차앤박) | 메인 `docs/reports/dermatology/00_research/` | 완료. 미확인 항목은 (e)절 | | Top3 AEO/GEO 자동 채점 + 사람 보정 4항목 | 메인 `docs/reports/dermatology/01_readiness_report/*_{audit_aeo_geo,overrides,score}_2026-09-10.json` | 오라클 36/D(AEO 24·GEO 6) · 톡스앤필 68/B(54·67) · 차앤박 48/C(24·55). 표본 URL 2개 | | 점수 계산기 `scripts/score_discovery_json.py`, 질문뱅크 생성기 `scripts/build_qb_dermatology.py` | 메인 | 원진 v1 49/C 로 검증. v2 는 v2Results 사람 판정이 없어 페이지 값과 다를 수 있음 | | 질문뱅크 120문항 v0.1 (병원별 3칸 사전판정) | 메인 `docs/reports/dermatology/03_question_bank/` | 2엔진 실측 전. 러너 인자화 필요 | | PRD v0.1 | 메인 `docs/prd/INFINITH_Dermatology_Supporters_PRD_v0.1.html` | §13 결정 질문 10건. 인디고 규칙 반영 | | Before/After 페이지 빌더 `scripts/build_before_after.py` | 메인. 원진 픽스처 `docs/reports/wonjin/02_before_after/`, 오라클 `docs/reports/dermatology/02_before_after/Oracle_Before_After_2026-09-10.html` | 오라클 36/D → 75/B, AEO 24 → 77, GEO 6 → 81 | | 오라클 서포터즈 자동 빌드 | Productize 워커, 작업 폴더 `~/supporters-builds/oracle`, 미리보기 **https://supporters-oracle.vercel.app** (noindex) | 글 8편(소개·지점 안내·상담 질문·시술 5영역), $0.61, 게이트 오류 0. 의학 검토·승인 전 초안 | ### 파이프라인에 새로 들어간 것 (Productize, 미커밋) - `supporters/scripts/collect_evidence.mjs`: 프레임셋·meta refresh·JS 리다이렉트 추적, charset 감지(EUC-KR), 쿼리 보존(`index.php?doc=N`), 쿼리 변형 중복 판정, 피부과 시술 어휘·`branches` 유형, `--extra-url`, facts.draft.json 에 `branches`·`branchPages`. - `supporters/scripts/ocr_evidence.mjs` + `ocr/vision_ocr.swift`: macOS Vision OCR(무료). 오라클 시술 83페이지가 이미지 글자였다. 워커 `ocr` 단계(evidence 다음), `--no-ocr`. - `supporters/scripts/default_briefs.mjs`: `--industry derm|plastic` 자동 감지, 피부과 8영역, 조건 표 8행 브리프, 지점 안내 후보. - `supporters/scripts/gate/rules.mjs`: PRICE_MENTION(error)·PRACTITIONER_MISSING(warn)·DEVICE_CLAIM(error)·피부과 금칙어. "100%"는 의료 맥락일 때만, 운영자 어휘 "복제"는 낱말 시작일 때만(피로회복제 오탐), 뉴스 제목 "부작용 없이" 제외. 테스트 41/41. - `supporters/scripts/gen/prompt.mjs`(피부과 규칙 블록) · `gen/evidence.mjs`(normUrl 쿼리 보존, OCR 섹션 표기). - `scripts/fetch_medical_tourism.py` 병원별 인자화 + 워커 `tourism` 단계(images 다음). `/stay`·`/en/stay` 하드코딩 제거. - 워커 `inputs` 단계: `supporters/briefs//clinic.json` 의 `factSheet`·`site`(srcMatch)·`excludeImages` 를 자동값 위에 덮어씀(이미지 파일·갤러리·images.json 매니페스트에서 제외). - `supporters/briefs/oracle/clinic.json`: 유튜브 @oracle_medical_group 고정, 로고 PNG, kind 피부과, 갤러리는 검단점 로비 1장, `sub_0*` 이미지 제외. ## 2. 다음 순서 1. **§3 결정 회수** (haewon). 2. **오라클 사람 확인**: (a) 의료진 67명 OCR 후보 확정(같은 이름 중복: 김승면 광주점·광주수완점), (b) 본사 시설 사진 요청(지금은 검단점 로비 1장), (c) 갤러리 육안 확인, (d) 푸터 표기 변경 확인(오라클랜드 주식회사 314-81-85931 대표 노영우 → 청담 오라클피부과의원 307-04-97234 대표 이영숙, 작업 중 사이트가 바뀜). 3. **뷰·원진 회귀**: 이번 변경(수집기·게이트·생성기·워커)이 두 병원에서 깨지지 않는지 `npm run gate:test`(41/41 확인됨) + 뷰 정답지 회귀 `npm run generate:regress`(비용 약 $2, 미실행) + 원진 `run.mjs --from data --skip-generate`. 4. **구조 기준선**: 오라클 첫 빌드라 `LAYOUT_NO_BASELINE` 경고. haewon 이 룩앤필을 승인하면 `node scripts/check.mjs --update-layout`. 5. **질문뱅크 러너 인자화** → 오라클 120문항 2엔진 실측(약 $2~4) → Before/After 페이지의 "환자 질문에 답할 수 있나" 카드에 실측값. 감성(기준표 v0.3) 판정 포함. 6. **커밋**: Productize(워커·스크립트·핸드오버)와 메인(PRD·뱅크·진단·Before/After·스크립트) 각각. 프론트 변경 없음이라 vercel --prod 불필요. 7. 톡스앤필·차앤박도 같은 워커로 빌드하면 세일즈 자료 3세트(각각 개별 Before/After). 한 화면 비교는 만들지 않는다. ## 3. haewon 결정 대기 1. **세일즈 사용 범위**: 오라클은 고객이 아니다. Before/After 페이지와 미리보기를 영업에 쓰려면 병원 자산(로고·사진·OCR 원문 재구성) 사용 범위를 정해야 한다. 미리보기는 noindex 이며 검색·AI 에 노출되지 않는다. 2. **지원 관계 고지 문구**(site.sponsorNotice): 비어 있어 글마다 DISCLOSURE_TOP_MISSING 경고. 고객이 아니므로 "지원 없음" 문안을 쓸지, 비워 둘지. 3. **주변 안내 사진**: TourAPI 사진이 없는 곳은 네이버 이미지 검색 폴백(제3자 저작물)을 쓴다. 공개 배포 시 `--no-naver-images` 로 끌지. 4. **의료진 OCR 후보 67명 노출**: 지금은 "OCR · 확인 대기"로 authors.json 에 있고 홈에는 안 나온다. 지점 안내 글의 담당 원장 표기에 쓸지. 5. 기존 미결: 도메인, 서포터즈 실명, 워커 상시 실행(Trigger.dev), PRD §13 의 파일럿 병원·가격 표기·상표명·실측 예산·리포트 영업 사용. ## 4. 함정 (이번 세션) - 사이트 스크립트 사본: 워커 `data` 단계가 템플릿을 작업 폴더에 복사하므로, 규칙을 고친 뒤에는 `templates/supporters-astro/scripts/` 동기화 + 작업 폴더 `site/scripts/` 재복사(또는 `--from data`)가 필요하다. 규칙만 고치고 `--from build` 하면 옛 규칙으로 검사한다. - `gen/evidence.mjs normUrl` 이 쿼리를 지우면 `doc=N` 페이지가 전부 한 페이지로 겹친다. 첫 생성 8편이 전부 휴지기탈모를 근거로 썼다. 고쳤고 재생성했다. - OCR 주의문이 강하면("수치·고유명사를 옮기지 않는다") 모델이 OCR 근거를 전부 버린다. 지금 문안은 "깨진 글자만 제외". - 색인 허용 빌드(PUBLIC_INDEXABLE=true)는 approvedAt 있는 글만 낸다. 승인 전 병원은 posts 가 0이므로 After 채점은 미리보기 빌드 + robots 보정으로 한다(overrides 에 근거 기록). - 이미지 자동 분류 "시설"에 시술 설명 이미지(모델 얼굴·전후 사진)가 섞였다. 사람 육안 확인은 계속 필요하다. 제외는 clinic.json excludeImages 로. - 오라클 공식 사이트는 Playwright networkidle 로 60초 타임아웃. `wait_until='load'` 로 캡처. - 게이트 "100%"·"복제"·"부작용 없이" 오탐 3종은 전부 제3자 텍스트(관광공사 식당 소개·뉴스 제목)에서 나왔다. 제3자 텍스트 영역은 규칙을 의료 맥락으로 좁혀야 한다.