- collect_news.mjs: 네이버 뉴스 검색 다중 질의(상호·원장·의료진·주제어, 429 백오프) + 언론보도 게시판 자동 발견/clinic.json newsBoard. 관련성 = 제목·요약에 병원 이름(v2 §8). 제목·매체·날짜·원문 링크만 저장. news_outlets.mjs 는 build_news.py 매체 표 이식 - gate: BANNED_NEWS_TITLE(전후 사진·비교, 후기, 변신)·NEGATIVE_NEWS(규제·사건, "무사고" 통과)·checkNewsItems → check.mjs·test.mjs(19/19) - 워커 news 단계(youtube 뒤, images 앞), --news-board/--no-news, status.report.news - 뷰 news.json: 렛미인 "변신" 기사 41건 규칙으로 제외(excludedByGate 에 목록). 회귀 1,105건(수작업 1,096, 제목 일치 1,033), 원진 1,049건 - launchd 폴러 설치(haewon 지시): PATH 에 프레임워크 python3, bootstrap/bootout 안내 - 함정: JS \W 는 한글을 지움(제목 중복 판정 붕괴), 워드프레스 article:published_time 은 게시판 생성일, 네이버 질의당 1,000건 - v3 문서 §1·§2·§3·§5·§6 갱신, 템플릿 재내보내기 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| viewclinic | ||
| wonjin | ||
| README.md | ||
기획 목록(brief) 형식
글 생성기(scripts/generate_posts.mjs)의 입력이다. v2 §3-11의 "기획 목록 승인"은 이 파일을 사람이 확인하는 것으로 한다. 생성기는 brief 밖의 근거를 쓰지 않는다.
node scripts/generate_posts.mjs --clinic <id> --brief briefs/<id>/<name>.json [--out DIR] [--dry-run] [--no-verify]
node scripts/generate_posts.mjs --clinic viewclinic --from-golden # 정답지 18편에서 brief 를 자동 추출해 회귀
파일
{
"posts": [
{
"id": "slug", // 파일명. posts/<id>.md
"title": "질문형 한 문장?", // H1. 물음표로 끝난다
"category": "D", "categoryLabel": "시술 정보",
"qbIds": ["D2-02"], // 질문 뱅크 문항 ID (화면에는 안 나옴)
"intent": "무엇을 어떤 형식으로 정리할지 한 문단", // 선택
"mustCover": ["..."], "avoid": ["..."], // 선택
"reviewerCandidate": "dr-cho", // authors.json physicians 키. 후보일 뿐, reviewStatus 는 항상 pending
"evidence": {
"pages": ["https://.../system/precautions/"], // 병원 페이지. evidence/<clinic>/pages 에 있어야 함
"shorts": ["videoId"], // videos.json shortsInfo 에 정리 답이 있는 영상
"transcripts": [{ "id": "", "title": "", "speaker": "", "text": "" }], // 선택. 자막이 있으면 여기로
"news": ["https://..."], // news.json 에 있는 기사 URL (제목·매체·날짜만 쓴다)
"regulation": [{ "label": "", "url": "", "note": "확인된 내용 한 줄" }], // note 가 없으면 링크로만 안내
"platform": false // true 면 팩트 시트 surfaces 를 sources 에 붙인다
},
"videos": [{ "id": "", "title": "", "speaker": "", "published": "", "note": "" }], // 글에 붙는 영상 (제목·화자만)
"hero": { "src": "/img/...", "alt": "", "caption": "" }, // 선택
"gallery": [], "thumbnail": "", // 선택
"sources": [] // 주면 evidence 로부터의 자동 조립 대신 이것을 쓴다 (정답지 회귀용)
}
]
}
생성 흐름
- 컨텍스트: evidence 를 §4 순서(병원 페이지 → 영상 정리 답 → 기사 → 규제 원문 → 팩트 시트)로 붙인다. 없는 근거는
missingEvidence로 리포트에 남긴다. - 생성(1회): 요약 3·본문·FAQ·태그·pending(근거에 없어 못 쓴 것)·usedRefs.
- 후처리: 근거 태그(
[C1]) 제거, 본문의 FAQ·참고 자료·연락처 섹션 제거(템플릿이 붙인다). - 검사: 소스 게이트(
gate/rules.mjs전부 + 금칙어 + 비교 수치 + 홈페이지 40자 중복) + 수치 대조(글의 숫자+단위가 근거에 그대로 있어야 함) + 모델 근거 대조(--no-verify로 생략). - 오류가 있거나 경고가
--warn-threshold(기본 4) 이상이면 오류 목록을 되돌려 수정 1회. 그래도 남은 근거 플래그는ok_needs_review로 표시해 사람이 본다. - 저장:
generated/<clinic>/<시각>/posts/*.md+report.md(편당 비용·시간·오류·확인 대기 목록).generated/는 커밋하지 않는다. 채택할 글은 사람이src/content/posts/로 옮긴다.
생성기가 하지 않는 것
reviewedAt·reviewStatus: reviewed를 쓰지 않는다 (§3-7 사람 게이트).- 자막 없는 영상의 발언을 만들지 않는다. 영상 근거는
shortsInfo[].answer또는transcripts뿐이다. - 기사 본문을 추정하지 않는다. 제목·매체·날짜만.
- 근거에 없는 수치를 쓰지 않는다. 쓰면
NUMBER_NOT_IN_EVIDENCE로 수정 대상이 된다.