[export-structure] clause marker·문맥 정확도 보강 (#3693) - #3715
Conversation
# Conflicts: # mydocs/orders/20260801.md
가지번호 marker 보존이 `unit == '조'` 로 제한돼 `제5장의2` 가 `제5장` 으로, `제2절의3` 이 `제2절` 로 절단됐다. 가지번호는 조 전용이 아니므로 단위를 가리지 않는다. `의` 뒤 숫자를 요구하는 기존 `k > j + 2` 조건이 `제1조의무`·`제3조의 규정` 같은 오검출을 그대로 막는다.
`real_work_plan_date_is_not_a_clause_item` 과 `real_handbook_toc_numbers_are_not_clause_items` 는 부재 단언만 있어, clause 파이프라인이 무관한 이유로 노드를 만들지 못하게 돼도 계속 통과한다. 거부된 후보가 preamble/body 텍스트로는 남아 있음을 함께 고정해 공허한 통과를 막는다.
collaborator self-merge 경로가 요구하는 review 문서를 PR diff 에 포함한다. samples 351개 전수 비교로 --mode clause 출력이 devel 대비 -867 노드(-7.7%) 변한다는 사실과, clause_heading_allowed 의 남은 한계 3건을 보고서 5절에 기록한다.
검토 결과와 보정 내용 공유
원 구현은 코드 품질과 검증 게이트를 통과했고 #3693의 완료 조건 다섯 항목을 모두 충족합니다. 전체 근거는 이 PR에 포함된 1. 코퍼스 영향 실측
감소분의 상당수는 의도한 과검출 제거입니다. 증가분은 계약(필드·봉투·exit code)은 불변이지만 출력 내용은 바뀝니다. 2. 회귀 테스트 판별력 확인새 통합 테스트를 devel 코드에 대고 실행해 실제로 결함을 잡는지 확인했습니다.
두 negative 테스트는 겨냥한 결함을 제대로 잡습니다. 이 PR에 반영한 보정
가지번호 단위 비대칭 — negative 회귀의 공허한 통과 방지 — 남은 한계 — 후속 이슈 대상
(1) 문맥 게이트가 한 방향으로만 작동하고 만료되지 않습니다.
devel에서도 1,016건이 있었으므로 회귀는 아니지만, 괄호형 인식 확대가 이 채널을 키웁니다. (2) 날짜 오검출이 앵커 안에서 남습니다. 부칙·개정연혁에서 흔한 형태입니다. 업무계획 negative 테스트가 통과하는 것은 그 샘플에 열린 (3) 검증보정 후
CI검토 시작 시점 head 이번 보정으로 source·test가 바뀌어 fast-pass 조건이 성립하지 않고, 새 head 권고merge 후보입니다.
draft·mergeable·head SHA·CI 상태는 이 시점 참고값이고, 최종 merge 조건은 최신 PR head의 |
|
검토 및 merge 완료했습니다.
연결 이슈 #3693은 완료 상태로 닫고 검증 근거를 남겼습니다. 이 리뷰에서 확인한 세 잔여 confidence 항목은 #3744로 생성해 #1528의 native sub-issue로 등록했으며, |
변경 내용
export-structure --mode clause가제1조의2같은 가지번호 조문을 온전히 인식하도록 보정합니다.1)·가)같은 약한 호·목 후보는 열린 조·항·호 문맥이 있을 때만 구조 노드로 채택합니다.StructureDoc/StructureNode와 CLI JSON 봉투 계약은 유지합니다.원인과 영향
기존 marker 파서는 가지번호 suffix를 조 번호에서 분리했고, 괄호형 번호 후보를 법령 문맥과 일반 목록에서 구분할 근거가 부족했습니다. 후보 인식과 부모 stack 기반 채택을 분리해 조문 계층은 복구하면서 일반 문서 과검출은 막습니다.
렌더러·레이아웃·직렬화 경로는 변경하지 않아 시각 출력에는 영향이 없습니다.
검증
CARGO_INCREMENTAL=0 cargo test --lib document_core::queries::structure -- --nocaptureCARGO_INCREMENTAL=0 cargo test --test issue_3693_structure_clause_context -- --nocaptureCARGO_INCREMENTAL=0 cargo test --test cli_json_contract export_structure_ -- --nocaptureCARGO_INCREMENTAL=0 cargo fmt --checkCARGO_INCREMENTAL=0 cargo clippy --all-targets -- -D warningsupstream/develf80b910aa병합 후CARGO_INCREMENTAL=0 cargo test --profile release-test --tests전체 통과Closes #3693
Parent: #1528