- Allowed dependencies 를 kebab-app 의 현재 Cargo.toml 과 정합되도록
보강 (kebab-search / kebab-llm / kebab-rag / kebab-embed 누락 추가).
본 task 가 새로 추가하는 deps 인 `kebab-parse-image` 만 \"NEW\"
라벨로 강조.
- Forbidden dependencies 를 추상적 한 줄에서 명시 리스트로 교체:
`kebab-tui` / `kebab-desktop` (UI layering), `kebab-eval` (cycle),
본 crate 안 image-specific 비즈니스 로직 (kebab-parse-image 가 이미
처리). P6-1/2/3 spec 의 컨벤션과 통일.
- Public surface 의 `Chunk` 사실 오류 정정:
• `chunk.section_label = None` 줄 삭제 (필드 없음)
• `chunk.source_span = ...` → `chunk.source_spans = vec![...]`
(실제 필드명 + Vec 타입 반영)
• `token_estimate` / `policy_hash` 채움 정책 추가.
- LM construction 절을 \"LM / OCR engine construction\" 으로 일반화
+ OCR 어댑터도 ingest session 당 1회 빌드 정책 명시.
- Behavior contract 에 \"Parallelism\" 새 절 추가 — 현재 markdown
branch 가 sequential 임 + 본 task 도 동일 + 5000장 OCR 시간
추정치까지 명시. 책 P7 이관 신호와 일관.
- Definition of Done 을 spec PR (이 PR — 모두 완료된 항목) 과
implementation PR (후속) 으로 분할. spec PR 의 머지 가능 시점
명확.
- `is_image_only_document` 의 doc-comment 추가 — P6-1 contract 가
이미 단일 ImageRef block 보장하지만 chunker 측 가드의 defensive
의도 명시.
본 PR 은 spec only — implementation 은 후속 PR.
P6-1 / P6-2 / P6-3 의 라이브러리 파이프라인 (`ImageExtractor`,
`OllamaVisionOcr`, `apply_caption`) 이 모두 머지되어 있지만
`kebab-app::ingest_with_config` 의 dispatch 가 markdown 만 처리하므로
CLI 에서 이미지 자산이 색인되지 않는 미완 구간 존재. 본 spec 은
그 wiring 을 별도 component task 로 잡아 P6-1/2/3 의 frozen contract
는 보존하고 통합만 본 task 의 contract 로 진행되게 한다.
핵심 결정 (사용자 brainstorming 반영):
- 청킹 옵션 A — `kebab-chunk::md_heading_v1` 에 image-only document
분기 추가, 단일 합성 청크 emit.
- 청크 텍스트 포맷 (β) — `<alt>\n\n<ocr.joined>\n\n<caption.text>`
plain concatenation. 라벨 없음. 빈 부분 drop.
- 실패 정책 (b) Lenient — extract 성공이면 doc 저장, OCR/caption
부분 실패는 Provenance Warning + `errors` 카운터 미증가.
- LM 인스턴스 — ingest 세션당 1회 빌드, `&dyn LanguageModel` 공유.
- 책 / 스캔 PDF — P6-4 scope 외, P7 PDF 라인이 책임.
- P6-5 (image-scale-hardening) 미시작 — 사용자 시나리오가
\"다이어그램 / 스크린샷 / 카메라 사진\" 으로 좁아져 불필요.
INDEX.md: P6 \"3 components\" → \"4 components\".
contract: docs/superpowers/specs/2026-04-27-kebab-final-form-design.md
sections: §3.4 ImageRefBlock, §6.1 ingest pipeline, §7.2
Extractor/Chunker traits, §9.1 image extraction policy.