fix: Windows CI 테스트 실패 진단·해결 + 포크 문서 일반화#12
Merged
Conversation
…ures - CLAUDE.md: fork-topology guidance without concrete fork names (push branches to your fork/origin, open PRs against upstream main) - cli.rs: the Windows CI leg fails edit_add_row_then_fill / fill_data_tables_grows (표 #0를 찾을 수 없습니다 - the md-synthesized table is missing after hwp new) and edit_seal_floating_image_roundtrip (anchor lost after the hwp5 roundtrip). Not reproducible on macOS/ubuntu, so dump the intermediate document's cat output in the asserts to split the hypothesis space (content lost at write vs lookup failure) on the next Windows run.
…invisible)
Root cause of all three Windows-only CI failures: cfb's Entry::path()
is built with Path::join, so on Windows the walked stream paths render
with backslashes. Every consumer of list_streams assumes '/' - the
/BodyText/Section prefix filter matched nothing, so any .hwp read back
on Windows had sections: 0 and empty text (표 #0 없음 in edit/fill,
anchor 'lost' in the seal roundtrip - the whole body was missing).
Direct open_stream("/DocInfo") paths were unaffected, which is why
FileHeader/summary still parsed and masked the bug.
Blind replace is safe: CFB entry names themselves cannot contain path
separators. The three instrumented cli tests are the regression net
(Windows leg).
Root cause of the 3 Windows-only CI failures (edit_add_row_then_fill,
fill_data_tables_grows, edit_seal_floating_image_roundtrip):
cfb 0.14's Entry::path() is built with Path::join, which renders '\'
separators on Windows ("/BodyText\Section0"). Our body_sections()
filter ("/BodyText/Section") then matched nothing, so hwp5 documents
read back with zero sections — valid files (writer passes '/' into the
crate) parsed as empty, with no error. Diagnostics captured from the
windows-latest runner (stream list + empty cat) confirmed the
mechanism.
list_streams() now normalizes every enumerated path to '/'. CFB entry
names cannot contain separators, so the mapping is loss-free. Adds a
synthetic regression test asserting normalized paths, exact section
enumeration, and reading BodyText through them.
3 tasks
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.
목적
표 #0를 찾을 수 없습니다진행 방식
1단계(이 커밋): 실패 지점에 중간 산출물 cat 덤프 계측 → Windows CI 로그로 가설 이분
2단계: 근본 원인 수정 커밋 추가 예정
체크리스트: scripts/check.sh 통과(로컬 macOS)
🤖 Generated with Claude Code
https://claude.ai/code/session_018AiF9yuE7MwRk4uYZBonw9