o2o-infinith-demo/docs/NEXT_SESSION_SUPPORTERS_AUTOBUILD_v2.md
2026-09-07 14:07:53 +09:00

23 KiB
Raw Blame History

다음 세션 프롬프트 v2 · "병원 URL 하나로 서포터즈 사이트까지 자동 빌드"

작성 2026-09-07 · 작성자 Claude (haewon 세션 핸드오버) · v1(2026-09-04)을 대체한다. v1의 §1 자산 위치·§3 파이프라인·§4 이식 코드·§6 함정은 여전히 유효하므로 그 부분은 v1을 참조하고, 이 문서는 v1 이후 사람 판단이 들어간 지점을 규칙으로 바꾼 기록이다.

왜 이 문서가 중요한가: 뷰성형외과 샘플은 URL 하나로 시작했지만, 실제로는 기획·설계·편집의 상당 부분을 사람이 판단했다. 자동 빌드가 같은 품질을 내려면 그 판단을 (1) 코드로 강제할 규칙, (2) 자동 검사, (3) 사람 승인 게이트 세 가지로 분해해 둬야 한다. 이 문서의 §3이 그 분해표다.


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

INFINITH 저장소(브랜치 feature/discovery-url-cta)에서 "AI Discovery 자동 빌드" 기능을 개발한다.
목표: /discovery 랜딩의 URL 입력 CTA에 병원 홈페이지 URL을 넣으면, 진단 리포트(/discovery/:id)에 이어
서포터즈 사이트(supporters/ Astro 프로젝트와 같은 구조)까지 자동 생성·미리보기 배포하는 것이다.

먼저 다음 순서로 읽는다.
1. docs/NEXT_SESSION_SUPPORTERS_AUTOBUILD_v2.md (이 문서. §3 판단 분해표와 §4 근거 프로토콜이 핵심)
2. docs/NEXT_SESSION_SUPPORTERS_AUTOBUILD.md (v1. 자산 위치·파이프라인·이식 코드·함정)
3. supporters/ (정답지. 글 18편, 팩트 시트, 발행 게이트, 편집 기준 /editorial)
4. docs/reports/viewclinic/04_supporters/ (GEO 계획, 2단계 콘텐츠 기획)

원칙: 이 문서 §3에서 "규칙"으로 분류된 항목은 코드로 강제하고, "검사"는 발행 게이트에 넣고, "사람"은 승인 UI로 남긴다.
사람 게이트를 자동화하려고 하지 않는다. 근거가 없는 사실은 생성하지 않고 "확인 대기"로 표기한다(§4).
작업 순서는 §7. 결정이 필요한 것은 §9를 보고 haewon에게 묻는다. 존댓말, 엠대시 금지, 은유 금지.

1. v1 이후 달라진 것 (2026-09-04 → 09-07)

항목 v1 (09-04) 지금 (09-07)
8편, 가명 작성자 2명, 감수 예정 18편. 작성자 안성민(AI오투오 대표·편집 책임) 1명. 검토 완료 10편(reviewedAt 2026-09-07), 검토 대기 5편
메뉴 글 / 영상 / 뉴스룸 / 병원 정보 / 운영 원칙 상담 전 질문 / 의료진 영상 / 뉴스룸 / 방문 안내(/visit 신설) / 매체 소개. 병원 정보(/clinic)는 푸터
화법 제작 원칙이 홈·소개에 노출 고객 화면에서 운영자 설명 전부 제거. 운영자용은 /editorial(noindex)
신뢰 층 감수 예정 배지, 참고 자료 링크 참고 자료 유형 태그, 규제 원문 링크, 글별 갱신 기록, 팩트 시트 확인일·다음 확인일, /corrections 정정 기록, 정정 요청 이메일
의료진 데이터 원장 4명 10명(성형외과 8, 이비인후과 1, 마취통증의학과 1)
스키마 Article·FAQPage·Person·Physician·MedicalClinic + reviewedBy·lastReviewed(검토 완료 글만), Person sameAs(한경 인터뷰)
외부 평가 자체 감사 엑셀 Astra 개선안(AS IS/TO BE), Codex 비교평가(공식 70.5 vs 서포터즈 76.5, GEO 67.5) 반영
진단 리포트 50/C 54/C (v1.1 정정: 블로그 활발, 프리저베 FAQ 존재, 시술 상세 수치 존재)

2. 이번 세션에서 사람 판단이 필요했던 순간 (시간순)

자동화 설계자가 알아야 할 "왜 그때 사람이 개입했는가"의 기록이다.

  1. "사이트가 제안서처럼 읽힌다" (haewon). 홈에 "답변엔진이 인용하는 단락", "질문 뱅크 120문항", "홈페이지 문장을 복사하지 않는다"가 있었다. 기획 문서의 논리가 고객 화면에 그대로 새어 나온 것. → 고객/운영자 화면 분리 규칙(§3-1).
  2. "룩앤필이 바뀌었다, 돌려놓고 텍스트만". 화법을 고치면서 섹션 구조·영어 헤딩·통계 블록까지 바꿨더니 거부됨. → 확정 디자인은 텍스트 교체만(§3-2).
  3. "합니다/하지 않습니다/밝힙니다는 영어 직역". 카드 제목은 명사구로. → §3-3.
  4. 외부 개선안 2건의 선별 수용. Astra 문서 44개 제안 중 소스 대조로 사실 지적(FDA 승인 일반화, 30분·다음날 출근, 특정 제품 권유, 후기 확인일 불일치, 영상 탭에 전후·후기 제목)은 수용, 기획 취향(영어 헤딩 제거, 숫자 제거, 120문항 묶기)은 haewon 결정으로 반려. → 제안 분류 기준(§3-9).
  5. 작성자 실명 확정(안성민 대표, sameAs 한경 인터뷰). 자동화가 정할 수 없는 값. → 사람 입력(§6).
  6. 의학 검토자 지정과 검토일. 영상 출연 원장을 감수자로 자동 표기하던 것을 중단했다가, haewon 지시로 검토일을 확정. 검토자 배정은 기사·프로필 근거로 제안하고 사람이 확정. → 사람 게이트(§3-7).
  7. 근거 없는 수치 처리. 출근 기준, 견적 포함 항목, 리프팅 지속 기간, 코·윤곽 재수술 시점, 타원 재수술 정책은 어떤 소스에도 없었다. 지어내지 않고 "자료에 없음 / 상담 확인 / 병원 확인 대기"로 표기. → 근거 프로토콜(§4).
  8. 보고서 오판 3건 발견. 08-28 진단이 2개 URL 샘플과 요약 도구에 의존해 블로그 정지·FAQ 0개·수치 없음으로 오판. 원본 HTML 파싱으로 정정. → 실측 규칙(§3-10).
  9. 고객용 덱 제목의 반말. "~다" 헤드라인이 병원에 단정적으로 읽힘. → 존댓말 규칙(§3-3).

3. 판단 분해표: 규칙 / 검사 / 사람

분류 기준. 규칙 = 템플릿·프롬프트·코드에 고정. 검사 = 발행 게이트(check.mjs 확장)에서 자동 판정. 사람 = 승인 UI에서 사람이 확정해야 다음 단계로 감.

3-1. 고객 화면과 운영자 설명의 분리

  • 규칙: 고객 화면(홈·글·영상·뉴스룸·방문·병원 정보·소개)에는 "무엇을 볼 수 있는가"와 "어떻게 쓰는가"만 쓴다. 제작 방식·선별 기준·수집 방법·기술 처리·법 조문 번호·내부 분류 코드(QB 번호)는 /editorial에만.
  • 검사: 고객 화면 빌드 결과에서 금칙 어휘 검출 → 답변엔진|AI 인용|AEO|GEO|질문 뱅크|QB [A-G]|실측|단일 원본|수집 기준|API 집계|임베드|복제|의료법 제\d+조|롱폼|쇼츠 분류. /editorial은 검사 제외.
  • 사람: 없음.

3-2. 확정 디자인의 보존

  • 규칙: 디자인이 확정된 뒤의 카피 수정은 텍스트 노드만 바꾼다. 섹션 순서·헤딩 언어(영어 세리프)·통계 블록·카드 규격은 유지. 영어 헤딩은 디자인 요소다.
  • 검사: 스크린샷 회귀(홈·글 목록·글 상세 3장, 1360px)를 이전 버전과 픽셀 차이로 비교해 텍스트 외 변화가 임계 초과면 경고.
  • 사람: 룩앤필 변경은 haewon 승인.

3-3. 한국어 화법

  • 규칙: 카드·섹션 제목은 명사구(답하는 방식 / 싣지 않는 것). 고객용 덱·문서의 판단 제목은 "~합니다/~입니다", 목차성 제목은 명사구. 본문 개조식("~없음")은 허용, 반말 서술("채운다")은 금지. 엠대시·은유 금지.
  • 검사: 제목 텍스트가 (합니다|하지 않습니다|밝힙니다)$처럼 동사 종결이면 경고. 본문에서 [가-힣]다\. 문장 검출(개조식 명사 종결은 제외 어렵기 때문에 경고 수준).
  • 사람: 최종 문안 확인.

3-4. 근거 유형과 원문 링크

  • 규칙: 참고 자료마다 유형(clinic 병원 제공 / doctor 원장 설명 / product 제품 정보 / regulation 규제·연구 / platform 플랫폼 집계 / secondary 2차 자료)을 붙인다. 규제·연구 주장은 영상 재진술이 아니라 원문 URL(FDA, ISO, 법령)까지 연결한다. 원장 발언은 "영상에서 설명한다"로 화자를 밝힌다.
  • 검사: sources에 type 없는 항목 실패. 본문에 FDA|ISO|승인|연구가 있는데 regulation 타입 소스가 없으면 실패.
  • 사람: 없음.

3-5. 근거 범위 표현

  • 규칙: 제품 승인은 "특정 제품·해당 국가 적응증"으로 한정하고 "위험이 없다는 뜻이 아니다"를 붙인다. 원장의 제품 선호·비교우위는 "임상 의견"으로 표기. 수술 시간·회복·복귀 시점은 "영상 사례"로 한정하고 개인차 조건을 답 옆에 둔다. "~하면 안전하다고 볼 수 있다"류 결론 금지. 특정 제품 권유는 "진료에서 정한다"로 닫는다.
  • 검사: 금칙 패턴 확장 → 안정성이 확인|안전이 보장|비교우위|장점을 합친|돌아가고 있다고 볼 수|다음 날 출근할 수 있을 정도 등. 수치(\d+분|\d+일|\d+주) 문장에 개인차|상담|영상 기준|사례 중 하나가 같은 문단에 없으면 경고.
  • 사람: 담당 원장 검토.

3-6. 수치·확인일 일관성

  • 규칙: 플랫폼 집계(강남언니·구글·네이버)는 값마다 확인일을 붙이고, 요약·FAQ·표에서 같은 값은 같은 확인일로. 팩트 시트에 checkedAt·nextCheck.
  • 검사: 같은 수치 문자열(예 19,373)이 글 안에서 서로 다른 날짜와 붙어 있으면 실패. nextCheck가 지났으면 빌드 경고.
  • 사람: 없음.

3-7. 작성자·검토자·검토일

  • 규칙: 영상 출연 원장을 검토자로 자동 배정하지 않는다. 검토자 미확정이면 "설명 {원장}" + "의학 검토 대기". reviewedBy·lastReviewed 스키마는 reviewStatus=reviewed일 때만. 검토일은 reviewedAt 필드(갱신일과 분리).
  • 검사: reviewStatus=reviewed인데 reviewedAt 없으면 실패. reviewer가 physicians에 없으면 실패.
  • 사람: 검토자 확정과 검토일은 병원 또는 haewon이 입력. 자동화는 후보(기사·프로필 근거)만 제안한다.

3-8. 싣지 않는 것

  • 규칙(v1 유지): 전후 사진, 환자 경험담, 타 병원 비교, 효과 보장, 가격 금액, 후기·전후·변신 제목 영상. 이유는 고객 화면에서 한 문장으로만("병원 지원을 받는 곳이 경험담으로 설득하면 광고가 된다"), 조문은 /editorial.
  • 검사: 기존 BANNED + 영상 제목 필터(전후|리뷰|성공|번호따|변신|역대급)를 영상 목록 빌드에 적용. 미결: "채널 인기 전체" 탭 제거 여부(haewon 결정 대기).
  • 사람: 탭 제거 결정.

3-9. 외부 개선안·평가의 수용 기준

  • 규칙: 제안을 세 갈래로 나눈다. (a) 사실 지적(소스 대조로 확인되면 수용), (b) 구조 제안(기존 페이지 보존 + 없는 것만 추가), (c) 기획 취향(haewon 결정). 점수 평가는 "무엇을 고칠지"에는 쓰고 "효과가 얼마인지"의 근거로는 쓰지 않는다.
  • 검사: 없음.
  • 사람: (c) 전부.

3-10. 실측 규칙

  • 규칙: 사이트 판정은 원본 HTML을 받아 파서로 확인한다(JSON-LD json.loads, H1 정규식, table 카운트, robots 원문, sitemap lastmod). 요약 도구(WebFetch 등 소형 모델)는 JSON-LD 타입을 틀리게 답한 전례가 있어 판정 근거로 쓰지 않는다. 표본 2개 URL의 결과를 사이트 전체로 일반화하지 않는다(최소: 홈 + 시술 상세 3개 + 오시는길 + 블로그 서브도메인).
  • 검사: 자동 채점기 입력 URL 수 5개 미만이면 경고 표기.
  • 사람: 없음.

3-11. 원천 콘텐츠의 정의 (G7)

  • 규칙: "홈페이지를 다시 쓰는 글"은 만들지 않는다. 원천으로 치는 5유형만 기획한다. 체크리스트(상담 질문·견적 항목), 조건 표(회복 일정·마취 선택·검진 주기), 협진·동선 설명, 발언 대본 인용(타임스탬프), 실측 기록(방문). 주제 선정 근거 = 질문 뱅크 ✕ 문항 × 유튜브 조회수 × 뉴스 주제 × 홈페이지에 없는 정보 유형.
  • 검사: 글 본문의 홈페이지 40자 연속 일치(기존). 표 또는 체크리스트가 하나도 없는 D·E 카테고리 글은 경고.
  • 사람: 기획 목록 승인.

4. 근거 프로토콜 (글 생성기가 지켜야 할 것)

이번 세션 10편은 아래 순서로만 사실을 가져왔다. 자동 생성기는 이 순서를 프롬프트 컨텍스트로 강제한다.

  1. 병원 공식 페이지 원문: 수술 전·후 주의사항(부위별 문장 전부), 애프터케어(부위별 프로그램·기간), 검진센터(항목·담당), 안전수술시스템(마취 프로세스·장비), 시술 상세(수술시간·마취·실밥·일상 복귀), 의료진 프로필(직함·경력). 문장은 옮기되 40자 연속 복사 금지.
  2. 쇼츠 정리 답: videos.json.shortsInfo[].answer처럼 이미 사람이 정리한 한 문단. 영상 발언의 근거는 이것만 쓴다(자막이 없으면 발언을 새로 만들지 않는다).
  3. 원장 기고·인터뷰 기사: 원장 이름과 매체·날짜를 밝히고 인용. 이름이 불확실하면(예: "정진우"로 읽힌 코재수술 칼럼) 이름 없이 "원장 칼럼"으로.
  4. 규제·연구 원문: FDA, ISO, 법령. 요약 도구가 수치를 확인하지 못하면 수치를 쓰지 않는다(예: FDA 검진 주기).
  5. 플랫폼 집계: 확인일 병기.

없는 것은 없다고 쓴다. 실제로 이번에 "자료에 없음"으로 남긴 것: 가슴성형 후 출근 기준, 견적 기본 포함 항목·결제 방식, 리프팅 효과 지속 기간, 코·윤곽 재수술 대기 기간, 윤곽 신경 손상 확률, 타원 수술 재수술 상담 정책. 페이지 간 표기가 다르면 둘 다 쓴다(코 실밥 제거 7일 vs 3일).


5. 신뢰 층 스펙 (템플릿이 기본으로 갖춰야 할 것)

요소 데이터 화면 스키마
작성자 authors.supporters[id]: name·role·bio·email·sameAs 글 상단 "작성", 하단 ReviewBox, /authors/:id Person + sameAs
편집 책임·정정 경로 corrections.json: owner·contact·items 소개, 푸터, ReviewBox, /corrections 표 WebPage dateModified
검토 reviewer·reviewStatus·reviewedAt 상단 "의학 검토 {원장} ({일})" 또는 "설명 {원장} · 의학 검토 대기", ReviewBox 배지 reviewedBy(Physician @id) + lastReviewed, reviewed일 때만
근거 sources[].type·accessed "참고한 자료" 유형 태그 + 확인일 + 한 줄 해설 (없음)
갱신 history[] "갱신 기록" 역순 목록 dateModified
팩트 factSheet.checkedAt·nextCheck FactBlock 각주 MedicalClinic
지원 관계 Disclosure 문구 모든 글 하단 (없음)

6. 병원(고객)이 입력해야 하는 것 (자동화가 만들 수 없는 값)

입력 폼으로 받는다. 받기 전까지 해당 표기는 "확인 대기"로 발행된다.

  1. 작성자 실명·직함·공개 프로필 URL(sameAs), 편집 책임자, 정정 요청 이메일
  2. 글별 의학 검토 원장과 검토일 (후보는 자동 제안)
  3. 지원 관계 문구(금전·자료·기타)
  4. 견적 기본 포함 항목과 결제 방식 (금액은 받지 않는다)
  5. 회복 일정표의 병원 확정값 (출근 기준 등)
  6. 재수술 정책 (타원 수술 상담 가능 여부, 부위별 대기 기간)
  7. 페이지 간 표기 불일치의 정답 (예: 코 실밥 제거일)
  8. 진료 분야별 담당 원장 (눈·코·윤곽·리프팅·마취)
  9. 정식 도메인, 색인 허용 시점, 홈페이지에서의 링크 위치

이 목록은 진단 리포트 v1.1의 마지막 "부탁드리는 것" 슬라이드와 같다. 리포트와 폼이 같은 항목을 가리키게 유지한다.


7. 작업 순서 (v1 §5를 이 순서로 대체)

  1. 게이트 확장 (supporters/scripts/check.mjs): §3-1·3-4·3-5·3-6·3-7의 "검사"를 추가하고, 현재 18편이 통과하는지 확인. 실패 케이스 픽스처 6개(운영자 어휘, type 없는 source, reviewed인데 reviewedAt 없음, 확인일 불일치, 영상 제목 금칙, 결론 문장)를 만든다.
  2. 템플릿화: supporters/에서 뷰성형외과 고유값을 데이터 파일로 몰고 templates/supporters-astro/로 복제. 신뢰 층(§5)이 빈 데이터로도 "확인 대기"로 렌더되게 한다.
  3. 근거 수집기: 병원 페이지 원문(주의사항·애프터케어·검진·안전·시술 상세·의료진)을 구조화해 evidence/<clinic>/*.json으로 저장. 40자 중복 검사용 home_text도 여기서.
  4. 글 생성 프롬프트: §4 순서의 컨텍스트만 주고, 출력은 frontmatter 규격 + sources type + history. 뷰성형외과 18편을 정답지로 회귀(같은 문항·같은 근거로 생성 → 게이트 통과 + 세 줄 요약·표·FAQ 규격).
  5. 승인 UI: §6 입력 폼 + 글별 검토 승인(검토자·검토일 입력 → reviewedAt 기록). 승인 전 글은 "검토 대기" 배지로 미리보기에만.
  6. 워커·배포·랜딩 연결: v1 §3·§5-2·5-5·5-6 그대로.
  7. 두 번째 병원 회귀: data/plastic surgery clinics url.json에서 한 곳. 사람 개입은 §6 입력과 §3 "사람" 항목만.

8. 이번 세션의 함정 (v1 §6에 추가)

  • Astro getCollection 스키마에 필드를 추가하면 기존 md 전부에 기본값이 필요하다. history·sources[].type.default([])·.optional()로.
  • YAML frontmatter 안에 큰따옴표 문자열 속 큰따옴표("근거 없는 "해외 환자 비중" 표현")는 파싱 실패. 생성기는 따옴표를 「」로 바꾸거나 이스케이프.
  • sed -n 결과를 근거로 파일 상태를 추정하지 말 것. 이전 python 스크립트가 이미 적용된 상태에서 재실행하면 assert가 깨진다. 멱등 처리 또는 사전 검사.
  • WebFetch 소형 모델은 JSON-LD 타입(LocalBusiness·MedicalBusiness가 있다고 답함)과 H1 목록을 틀리게 요약했다. 판정은 curl + 파서로만.
  • 뉴스 데이터에 병원과 무관한 기사(AI오투오 출시 기사 등)가 섞인다. 본문 관련성 필터 필요(Astra 지적, 미반영).
  • 헤더 메뉴 이름이 길어지면 720~1040px에서 두 줄로 깨진다. nowrap + 구간별 축소 규칙 추가함.
  • 글 목록은 카테고리별 글 수가 1편이면 세로로 쌓인다. 글 수만큼 span하는 그리드로 해결(.cat-grid, 3→2→1열).
  • 덱 빌더(ifd)는 폰트 확정 기준(본문 20)에서 카피 분량 검사를 강제한다. 3열 카드 불릿은 약 30자, 2열 rows 본문은 약 55자, 리드는 약 60자, 제목은 약 20자. 폰트를 줄이지 말고 카피를 줄인다.
  • LibreOffice PDF 변환은 pptx 재빌드 실패 시에도 이전 파일로 조용히 성공한다. 빌드 → 축소 → PDF를 &&로 묶는다.

9. haewon에게 물어볼 것

  1. 영상 페이지 "채널 인기 전체" 탭(전후·후기 제목 포함) 제거 여부.
  2. §6 입력 폼을 어디에 둘지: 서포터즈 사이트 내 관리자 페이지 / INFINITH 랜딩 / 노션·이메일.
  3. 검토 승인의 법적 책임 주체(병원 원장 서명 형태가 필요한지).
  4. 두 번째 검증 병원.
  5. 생성 모델과 키(Claude API 회사 키 유무), 글 생성 단가 상한.
  6. v1 §7의 워커 위치·배포 방식.

10. 완료 기준 (v1 §8에 추가)

  • §3의 "검사" 11개가 게이트에 있고, 픽스처로 각각 실패를 재현한다.
  • 뷰성형외과 18편이 확장된 게이트를 0오류로 통과한다.
  • 자동 생성 글이 §4 순서 밖의 사실을 포함하지 않는다(근거 없는 수치 = 0건, 수동 대조 10편).
  • §6 입력이 비어 있어도 사이트가 "확인 대기" 표기로 빌드·배포된다.
  • 병원이 §6을 채우면 코드 수정 없이 데이터만으로 검토 완료·스키마가 켜진다.

11. 진행 기록 (2026-09-07 세션 2 · 브랜치 feature/supporters-autobuild, 워크트리 orca/workspaces/INFINITH/Productize)

§7의 1·2단계를 마쳤다. 3단계부터는 §9의 답이 필요한 항목이 섞여 있어 아래 "남은 결정"을 먼저 본다.

11-1. 게이트 확장 (§7-1) · 커밋 49c5e46

  • supporters/scripts/gate/rules.mjs: §3의 "검사"를 순수 함수로. error(배포 차단) 11종 + warn 6종.
    • error: OPERATOR_VOCAB(3-1) · SOURCE_TYPE_MISSING/UNKNOWN(3-4) · REGULATION_SOURCE_MISSING(3-4) · CONCLUSION_PHRASE(3-5) · NUMBER_DATE_MISMATCH(3-6) · REVIEWED_WITHOUT_DATE/REVIEWER · REVIEWER_UNKNOWN · AUTHOR_UNKNOWN(3-7) · BANNED_VIDEO_TITLE(3-8) · BANNED_PHRASE · HOME_DUPLICATE(기존)
    • warn: LAYOUT_CHANGED(3-2, 픽셀 대신 텍스트를 뺀 tag.class 구조 지문 비교) · HEADING_VERB · PLAIN_ENDING(3-3) · NUMERIC_NO_QUALIFIER(3-5) · FACT_NEXTCHECK_PASSED(3-6) · NO_TABLE_OR_CHECKLIST(3-11)
    • 결론 문장 검사는 문장 단위이고 부정문("보장되는 것은 아닙니다")과 임상 의견 표기("원장의 임상 판단")는 통과시킨다. 정답지 18편이 이 예외 없이는 걸린다.
  • scripts/check.mjs: dist + 소스 frontmatter + 데이터 JSON 검사. --update-layout은 haewon이 룩앤필 변경을 승인한 뒤에만.
  • scripts/gate/test.mjs + fixtures/ 9개: 실패 재현 7건(운영자 어휘·type 없는 source·reviewed인데 reviewedAt 없음·검토자 미등록·확인일 불일치·영상 제목 금칙·결론 문장·규제 원문 없음) + 18편 회귀 + 부정문 통과. npm run gate:test.
  • 18편 결과: 오류 0, 경고 10(수치 한정 없음 5, 「채널 인기 전체」 탭 영상 제목 5). corrections.json의 「답변엔진」과 반말 문장 1건은 고쳤다.
  • scripts/audit_aeo_geo.py: 표본 URL 5개 미만 경고(§3-10). 채점기 자체는 아직 2개 URL만 읽는다.

11-2. 템플릿화 (§7-2) · 커밋 622441e

  • 병원 고유값은 factSheet.json(사실) · authors.json(사람) · site.json(매체 이름·로고·홈 큐레이션·방문 약도·추천 글) 세 파일로만 들어간다. 페이지 15개에서 하드코딩을 뺐다.
  • lib.ts: PENDING = '확인 대기', v()(표시), has()(스키마·링크), surface(). 빈 값은 화면에 "확인 대기", 스키마에서는 필드 제거.
  • 검증: 28페이지의 표시 텍스트와 구조 지문이 리팩터 전 빌드와 동일. JSON-LD 차이는 빈 sameAs: [] 제거뿐.
  • scripts/export_template.mjstemplates/supporters-astro/. 글·데이터·이미지·home_text·구조 기준선을 빼고 scripts/template/data/의 빈 세트를 넣는다. 병원 문자열이 남으면 실패. 빈 데이터로 10페이지 0오류 빌드, 게이트 통과.
  • 템플릿 사용: templates/supporters-astro를 복사 → 데이터 6개 + posts + public/img + home_text 채움 → __CLINIC_ID__ 치환 → npm ci && npm run build.

11-3. 남은 단계와 의존 관계

단계 상태 막는 것
3 근거 수집기 (evidence/<clinic>/*.json) 미착수 없음. Firecrawl 키는 .env에 있음(v1 §6). 뷰성형외과 6종 페이지(주의사항·애프터케어·검진·안전·시술 상세·의료진)로 회귀
4 글 생성 프롬프트 미착수 §9-5 생성 모델·키·단가 상한
5 승인 UI (§6 입력 폼) 미착수 §9-2 폼 위치, §9-3 법적 책임 주체
6 워커·배포·랜딩 연결 미착수 §9-6 워커 위치·배포 방식, discovery_leads 마이그레이션 미적용
7 두 번째 병원 회귀 미착수 §9-4 병원 선정
「채널 인기 전체」 탭 경고만 §9-1. 제거로 결정되면 check.mjslevel: R.W를 지우고 videos.astro 탭을 뺀다