fix(search): correct large-doc manifest wording after commit 4 drop

PR-DocSrv-LargeDoc-Split-Markdown-1 follow-up (plan brisk-paging-quokka.md).

commit 4(marker_section→document_chunks) 드롭으로, split md_content/manifest 의
「권위 검색본 = document_chunks (source_type=marker_section)」 문구가 실제와 불일치.
실제 = 검색 인덱스는 기존 document_chunks(extracted_text long_pdf window chunks),
marker_section chunk 부재, md_content 는 Markdown 렌더링 preview.

- _build_large_md_content 헤더: 「검색 인덱스 = 기존 document_chunks long_pdf/
  extracted_text window chunks. 아래는 Markdown 렌더링 preview.」
- _split_manifest: canonical_storage(marker_section) → search_index(legacy/extracted_text)
- 상수 주석 + _process_split docstring: commit 4 드롭/이중적재 회피 반영

뷰어에 없는 source_type 으로 디버깅 오도 방지. 이미 처리된 5 docs 의 md_content 는
즉시 재처리 X — 자연 reprocess 시 갱신(사용자 결정).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
hyungi
2026-05-24 09:48:03 +00:00
parent cf0d75fe84
commit 826f66f8f5
+9 -7
View File
@@ -44,8 +44,9 @@ MAX_PAGES = 200 # 소형 1-shot 경로 /convert max_page
# LargeDoc split (PR-DocSrv-LargeDoc-Split-Markdown-1, plan brisk-paging-quokka.md):
# >SPLIT_THRESHOLD_PAGES PDF 는 통째 skip 대신 BATCH_PAGES 윈도우로 page-range 분할 변환.
# 각 batch /convert 호출 < MARKER_TIMEOUT 보장 + queue 폭주 회피. 권위 검색본(섹션 chunks)은
# commit 4 에서 document_chunks(source_type=marker_section) 에 적재 (본 commit 3 미포함).
# 각 batch /convert 호출 < MARKER_TIMEOUT 보장 + queue 폭주 회피. 목적 = md_content(Markdown
# 렌더링) 복구. 검색 인덱스는 기존 document_chunks(extracted_text window chunks)가 담당
# (commit 4 marker_section 적재는 이중 적재 회피로 드롭 — 별 PR retrieval 비교 후보).
SPLIT_THRESHOLD_PAGES = int(os.getenv("MARKER_SPLIT_THRESHOLD_PAGES", "120"))
BATCH_PAGES = int(os.getenv("MARKER_BATCH_PAGES", "40"))
MAX_SPLIT_PAGES = int(os.getenv("MARKER_MAX_SPLIT_PAGES", "5000")) # 초과 = skipped_too_large 안전상태
@@ -377,9 +378,9 @@ async def _process_split(
"""대형 PDF page-range 분할 변환.
BATCH_PAGES 윈도우로 순차 /convert (각 호출 < MARKER_TIMEOUT). batch 단위로
이미지 persist + ref rewrite 후 stitch. md_content = head+manifest (full blob 미저장,
canonical 검색본 = document_chunks, commit 4). 결과: 전부 성공=success / 일부=partial /
전부 실패=failed.
이미지 persist + ref rewrite 후 stitch. md_content = head+manifest (full blob 미저장).
검색 인덱스는 기존 document_chunks(extracted_text window)가 담당 (marker_section 적재
= commit 4 드롭). 결과: 전부 성공=success / 일부=partial / 전부 실패=failed.
invariant: page numbering = 1-based inclusive (batch1: 1..BATCH_PAGES, ...).
marker slug(`_page_0_*`) 는 batch 마다 재시작 → batch 별 rewrite 후 stitch (충돌 회피).
@@ -547,7 +548,7 @@ def _split_manifest(
{"start_page": f["start_page"], "end_page": f["end_page"], "error": f["error"]}
for f in failed
],
"canonical_storage": "document_chunks(source_type=marker_section)",
"search_index": "document_chunks(legacy/extracted_text window chunks)",
}
@@ -561,7 +562,8 @@ def _build_large_md_content(head: str, manifest: dict[str, Any]) -> str:
f"failed={failed_n} -->\n"
f"> 📄 **대형 문서 분할 변환** — 총 {manifest['total_pages']}p · "
f"{manifest['batch_count']} batch (batch_pages={manifest['batch_pages']}) · 상태 **{badge}**\n"
f"> 권위 검색본 = `document_chunks` (source_type=marker_section). 아래는 head preview.\n\n"
f"> 검색 인덱스 = 기존 `document_chunks` long_pdf/extracted_text window chunks. "
f"아래는 Markdown 렌더링 preview.\n\n"
)
return header + head