# 위키 문서 파이프라인 — 포맷 통일 규약 (v2.2.278)

> **새 기능이 위키/지식 문서를 만들 때 반드시 이 문서를 따른다.**
> 기능마다 포맷이 하나씩 새로 생기던 파편화(wikify ≠ meet ≠ email …)를 끊기 위한 규약.

## 구조 (2층)

```
[생성]  buildKnowledgeWikiPrompt(src)     ← 지식형 문서의 단일 프롬프트 빌더
              │  (P-Reinforce 정본: frontmatter + 🎯/🧠/🧩/📖/🔗/📚 섹션)
              ▼
[저장]  persistWikiDoc(title, content, { store, docType, sources })
              │  ① 봉투: frontmatter 없으면 정본 봉투 자동 부착 (ensureFrontmatter)
              │  ② 위치: 설정 폴더 → 두뇌/<종류별 폴더> → 워크스페이스 (로컬 직접 저장)
              ▼
        brain 검색 · 지식 그래프에 자동 편입
```

핵심 모듈: `src/features/datacollect/wikiFormat.ts` (정본 fetch·봉투·공용 빌더) · `wikiSave.ts` (저장).

## 새 기능 추가 시 딱 2가지

### 1) 지식형 문서 (소스를 지식으로 합성 — wikify류)
`KnowledgeSource` 하나 정의해서 공용 빌더 호출. **새 프롬프트 골격을 만들지 말 것.**

```ts
import { buildKnowledgeWikiPrompt, getCanonicalFormat } from '../datacollect/wikiFormat';

const canonical = await getCanonicalFormat();          // 브리지 정본 (10분 캐시, 실패시 내장 사본)
const prompt = buildKnowledgeWikiPrompt({
    kind: 'slack',                                     // 소스 종류
    topic: '채널 논의 제목',
    body: transcript,                                  // 근거 원문 (30,000자 컷은 빌더가)
    meta: { 채널: '#dev', 기간: '…' },                  // [소스 메타] 표시
    sourceRef: 'slack:#dev/2026-07-03',                // [S1] 출처 + raw_sources
    extraRules: ['이 소스 종류만의 특수 규칙…'],          // 번호는 빌더가 이어붙임
    trustHint: '내부 교신이므로 A~B 로',                 // source_trust_level 평가 힌트
}, canonical);
// → callLmSynthesis(prompt, WIKIFY_SYSTEM류) → persistWikiDoc(..., { docType: 'slack' })
```

기존 래퍼 예시: `wikifyPrompt.buildWikifyPrompt`(web) · `buildEmailCanonicalWikifyPrompt`(email) — 이 패턴을 복사할 것.

### 2) 보고서형 문서 (자기 본문 구조가 있는 산출물 — meet/benchmark/review류)
본문 구조는 자유. **저장만 반드시 `persistWikiDoc` + `docType`** — 봉투(frontmatter)가 자동 통일된다.

```ts
import { persistWikiDoc, describeSave } from '../datacollect/wikiSave';
const saved = await persistWikiDoc(title, report, { docType: 'meeting', sources: [원본파일] });
chunk(view, describeSave(saved, '회의록'));
```

## 금지 사항
- ❌ 자체 frontmatter 골격을 손으로 작성 (봉투는 `ensureFrontmatter`가 담당)
- ❌ 브리지 `/api/wiki/template` 를 직접 fetch (→ `getCanonicalFormat()` 사용, 캐시 공유)
- ❌ `bridgeFetch(wiki.save)` 직접 호출 (→ `persistWikiDoc` — 로컬 저장·폴더 규칙·폴백 포함)
- ❌ 프롬프트에 섹션 구조 하드코딩 (정본 템플릿은 브리지 wiki_format.mjs 가 단일 소유)

## 현재 등록된 docType
`wikify`(web) · `email` · `meeting` · `benchmark` · `youtube` · `review`
