Repository navigation
fix: 폐기 경고·문서·예외 체계·작은 결함 정리 - #678
Merged
Merged
Conversation
- doc.style → doc.styles.get, doc.set_check_box → doc.fields.set_check_box (전에는 없는 doc.styles.style, doc.fields.check_box(...).checked) - 이동 대상 79개가 실제 속성으로 풀리는지 확인하는 테스트 추가 - llms.txt: .hwp는 BadZipFile이 아니라 열린다 - api_reference: HwpxDocument.save()는 없다 - examples/build_release_checklist.py를 공개 6.x API로 다시 쓰고 실행 테스트 추가 - usage.md의 5.x 평면 이름을 6.x 이름으로 (예제 장부·지문 갱신) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
EquationConversionError, UnsupportedLatexError, MathMLUnavailableError, DocumentIngestError, UnsupportedDocumentFormat, RecoverError, WordBoxExtractorRequired. 기존 ValueError·RuntimeError 부모는 유지한다. 코드 7개와 도메인 4개(equation, ingest, recover, toc)를 레지스트리에 올리고 docs/error-codes.md를 다시 만들었다. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
HwpxDocument.open / HwpxPackage.open이 손상 종류마다 BadZipFile, zlib.error, lxml XMLSyntaxError를 그대로 올리던 것을 HwpxStructureError 하위 클래스로 감싼다. 원래 예외는 __cause__에 둔다. - HwpxArchiveError(HwpxStructureError, BadZipFile) - HwpxCompressedDataError(HwpxStructureError, zlib.error) - HwpxXmlSyntaxError(HwpxStructureError, XMLSyntaxError), part_name 포함 각 클래스가 전에 나던 예외도 상속하므로 기존 except는 그대로 잡는다 (docs/stable-api.md가 적어 둔 BadZipFile 계약 유지). open의 독스트링, stable-api, api_reference를 실제와 맞췄다. opc/security.py는 건드리지 않았다. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
- HwpxDocument.new(): 템플릿의 지은이(synthetic-fixture-author)와 2025-09-17 고정 날짜 대신 빈 지은이와 만든 시각(UTC)을 쓴다. Skeleton.hwpx와 blank_document_bytes()는 그대로 두고 templates.new_document_bytes()가 content.hpf의 메타데이터만 바꾼다. - doc.parts.histories: historylastdoc.hml(HWPML 스냅숏)의 to_model()이 죽지 않고 빈 History를 돌려준다. is_version_log 추가. - doc.text.html(): 병합 칸에 colspan·rowspan. - doc.tables.all 독스트링을 실제 범위(본문 바로 아래 표)로. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…-24) HwpxMarkdownConverter가 lossiness="low", warnings=[]를 고정으로 붙이던 것을, Markdown에 글이 실리지 않은 요소를 결과와 대조해 종류별로 세도록 바꿨다(metadata["left_out"], warnings, lossiness low/medium/high). 미리 정한 목록이 아니라 결과 대조라, 내보내기가 어떤 종류를 싣게 되면 보고에서도 빠진다. 변경 추적으로 지운 글 표시는 따로 경고한다. README의 "읽기·추출" 문구를 실제 범위로 고쳤다: 각주·미주는 notes=True·rich Markdown·TextExtractor에서, 머리말·꼬리말·메모는 TextExtractor에서만, 수식·글자 겹침·양식 개체 캡션은 어느 경로에도 없다. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
CONTRIBUTING은 `.[dev]` 설치 뒤 ruff와 pytest를 돌리라고 하는데 dev에 ruff·pillow·openpyxl·pyyaml·pytest-cov·numpy가 없었다. dev를 CI가 쓰는 test + typecheck의 상위 집합(+ twine)으로 만들고, CONTRIBUTING과 installation.md에 CI extra를 함께 적었다. 테스트가 세 곳의 일치를 본다. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
- scripts/coverage_ledger.py: src/hwpx/hwp5/(.hwp → HWPX 변환기)에 나오는 HWPX 태그는 방출이므로 읽기로 세지 않는다. 읽기 266 → 256 (hp:hiddenComment 등 10개). 쓰기 판정은 전과 같다(api 209 그대로). - capabilities.py: 차례·상호참조, 제목 차례 표시, 색인 표시, 날짜·교정 부호·파일 이름 필드, 메일머지 표시 필드는 doc.refs·doc.fields에 없다. namespace를 None으로, 진입점을 실제 모듈·문단 클래스로 고쳤다. - support-matrix.md: 같은 자리 표, arc·polygon·curve·connectLine 행의 자기모순(저작 API 없음 ↔ add_curve·add_connector), 차트 행의 add_chart(chart_xml) 설명. 계약 문서 사본·장부·표면 인벤토리 재생성. 읽지도 쓰지도 못하는 요소(hp:btn·hp:radioBtn)의 by-capability-area 표시는 그대로다: tests/test_coverage_ledger.py가 그 값을 고정하고 있고 그 파일은 이 갈래에서 고치지 않는다. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
전체 테스트에서 새로 깨진 4건을 바로잡는다. - test_document_metadata: 새 문서는 템플릿의 date를 물려받지 않는다(ENG-36) - model_surface.json·stable-api.md: History에 is_version_log 추가(ENG-36) - python-example-ledger.json: README 문구 변경에 따른 해시(ENG-21) - test_ns_refs: toc-crossref의 namespace는 None(ENG-33) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
airmang
commented
Nov 10, 2026
airmang
left a comment
Owner
Author
There was a problem hiding this comment.
Reviewed 5f2a412, including damaged-input exception MRO and cause preservation, fresh-document metadata/SOURCE_DATE_EPOCH, HTML cell spans, ingest loss reporting, public migration targets and the runnable example. Exact-head CI: all 13 checks pass; Python 3.12 log records 7,814 passed, 23 skipped, 1 xfailed. Local focused checks: 377 passed, 10 skipped. Rebuilt the merge tree against latest main 431be59 after #676, with 388 passed, 10 skipped in that integration tree. No unresolved correctness issue found. COMMENT is used because the signed-in account owns this PR. No package/plugin release or Hancom process was launched.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
요약
2026-11-10 점검에서 나온 문서·공개 API·오류형 쪽 항목을 고칩니다. 커밋은 항목별로 나눴습니다.
doc.styles.style,doc.fields.check_box(...).checked).doc.styles.get,doc.fields.set_check_box로 고치고, 79개가 실제 속성으로 풀리는지 보는 테스트를 넣었습니다.llms.txt의 ".hwp를 열면 BadZipFile"을 고쳤습니다.api_reference.md의 없어진save()설명을 고쳤습니다.usage.md의 5.x 평면 이름 64곳을 6.x 이름으로 바꿨습니다.examples/build_release_checklist.py는 실행하면 죽던 것을 공개 6.x API로 다시 쓰고 실행 테스트를 넣었습니다.HwpxError도 상속합니다. 기존ValueError·RuntimeError부모는 그대로입니다.HwpxArchiveError,HwpxCompressedDataError,HwpxXmlSyntaxError를 더했습니다. 모두HwpxStructureError의 하위이면서 원래 예외(BadZipFile,zlib.error,XMLSyntaxError)도 함께 상속하므로 기존except는 그대로 잡힙니다.HwpxDocument.new()로 만든 문서의 지은이가synthetic-fixture-author, 만든 날이 2025-09-17로 고정이던 것을 빈 값과 만든 시각으로 바꿨습니다(SOURCE_DATE_EPOCH를 따릅니다).historylastdoc.hml의to_model()이 죽던 것을 고쳤습니다.doc.text.html()의 병합 표에colspan·rowspan을 넣었습니다.hwp5/가 써내는 코드를 뺐습니다(읽기 266 → 256).capabilities.py와 지원 표의 API 자리 안내를 실제에 맞췄습니다.metadata["left_out"],warnings,lossiness에 싣습니다. README의 "읽기·추출" 문구를 실제 범위에 맞췄습니다.devextra를 CONTRIBUTING·CI와 맞췄습니다.병합 전에 볼 것
CreatedDate가 만든 시각이 되면서HwpxDocument.new().to_bytes()가 호출 시각마다 달라집니다. 바이트 재현이 필요하면SOURCE_DATE_EPOCH를 씁니다.date가 빈 새 문서를 한/글에서 열어 보지는 않았습니다. 엔진의 열림 검사는 통과합니다.test_document_metadata,test_ns_refs). 둘 다 위 변경과 충돌하던 것입니다.hp:btn·hp:radioBtn에 붙은 Render-verified 표시는 그대로입니다.tests/test_coverage_ledger.py가 고정하고 있습니다..hwp쓰기와 README의 정확도 숫자에 관한 문구는 바꾸지 않았습니다.관련 이슈
없음
변경 종류
체크리스트
pytest테스트가 통과합니다. — Windows 11에서 7,796 통과, 18 실패. 14건은 이 변경 전 main에서도 같은 이름으로 실패하던 것입니다(cp949, 심볼릭 링크 권한, CRLF). 나머지 4건(test_deviations_registry의 dev029~032)은 다른 작업이 함께 돌아 메모리가 부족하던 전체 실행에서만 실패했고, 그 파일만 따로 돌리면 통과합니다. Linux CI 결과는 이 PR의 체크로 확인해 주세요.CHANGELOG.md를 갱신했습니다(해당하는 경우).🤖 Generated with Claude Code