실측 코퍼스 메트릭 (M9 Published Corpus)
python-hwpx 스택이 만든 산출물을 실제 한컴오피스(Windows COM + Mac GUI 오라클)로
전수 측정한 결과다. 아래 숫자는 전부 동결 코퍼스 위에서 기계 판정으로 산출되며,
릴리스마다 재측정해 이 페이지와 히스토리 파일에 추가된다.
참고
지표 축 주석 (반드시 읽을 것). 이 페이지의 숫자는 생성물 수용률 계열이다 — “우리가 만든 HWPX를 실제 한컴이 열고/파싱하고/렌더하는가, 채움이 서식을 보존하는가, 개인정보가 새지 않는가”. 문서 파싱 recall(남의 파일을 얼마나 잘 읽는가)과는 다른 축이므로, 파서 프로젝트의 수치와 병치 비교하면 안 된다.
최신 측정 (2026-07-19 · corpus v2 · N=497 produced + 9 negative controls)
측정 스택: python-hwpx 3.4.1 후보(코퍼스 측정 시점 소스; v3.4.0은 게이트 실패로 미발행 보존 태그) · 실한컴 12.0.0.3288 (Windows COM, 무인 scheduled task) · Mac 한컴 12.30 GUI(샘플 오라클).
축 |
결과 |
판정자 |
비고 |
|---|---|---|---|
오픈 수용률 |
476/476 = 100% all-pass (하한 ≥99.4%, rule-of-three) |
실한컴 COM |
product-provenance 분모. 내부 픽스처 21건은 별도 발행(아래) |
파싱(내용 적재) |
458/476 = 96.2% |
COM 텍스트 프로브 (redline 문서는 |
비텍스트 문서(그림 전용 등)는 정의상 비파싱 집계 |
렌더 검증 |
render_checked 416/476 |
COM |
+43 |
바이트 보존 |
497/497 = 100% (미수정 part) |
zip-part diff (오라클 불요) |
patch 경로 한정 — 풀세이브는 명시적 out-of-claim |
양식 채움 차등 |
fit-off 31/63 = 49.2% · fit-on 32/63 = 50.8% (wild 공개 양식 25종) |
blank↔filled 실렌더 기하 비교 |
정직 실측: 아래 “양식 채움 fit 실측” 절 참조 — fit은 wild 실패의 지배 레버가 아님이 측정됨 |
저작 품질 게이트 |
58/65 = 89.2% |
공문 구조 hard-gate + 품질 검사 (오라클 불요) |
실패 7건 전원이 의도적 결문-생략 네거티브 변종 (게이트 판별력 증거) — 실저작 58/58 |
PII 0-leak |
0 누출 (35문서 / 합성 개인정보 140값) |
raw-grep 전 산출물 + MCP 추출 3표면 |
마스킹 default-on 경로 |
네이티브 목차 |
구조 15/15 · 실한컴 재계산 후 페이지 정합 5/5 |
구조 검사 + Mac 한컴 refresh→render 샘플 |
refresh와 export는 세션 분리(한컴 크래시 회피 계약) |
정직 버킷 규율: 렌더 실패·미검증은 절대 pass로 집계하지 않는다. 변경추적 문서
43건의 render_unavailable은 한컴 자체의 제약을 그대로 발행한 것이다. 내부 진단
픽스처 21건(재생 프로브·스크립트 제작 마스터)은 정체 기준으로 태깅해 분리 발행한다
(10 open / 11 refuse — 제품 산출물 아님).
양식 채움 fit 실측 (S-085, 2026-07-20)
같은 66쌍을 fit 비활성(baseline)과 fit 활성(height-budget 엔진)으로 실한컴 렌더해 차등 판정한 결과. 층은 채움 값 길이로 나눈다(short/medium=기대-통과, overflow= 의도적 과적재 스트레스).
층 |
fit-off |
fit-on |
비고 |
|---|---|---|---|
short (한두 글자) |
15/22 = 68% |
15/22 = 68% |
0 이동 — 축소할 값이 없으므로 fit 무관 |
medium |
12/22 = 55% |
12/22 = 55% |
0 이동 |
overflow-stress |
7/22 = 32% |
8/22 = 36% |
+4pp — fit이 실제로 작동하는 유일한 층 |
기대-통과(short+medium) |
27/44 = 61.4% |
27/44 = 61.4% |
0 이동 |
결론(정직 발견): 양식 채움 차등 실패의 지배 원인은 fit이 아니라 구조적
요인이다. short 값(축소 불가)조차 68%에 정체하는 것이 그 증거다. 측정된 3부류
지배 결함: ① 채움 시 글자 겹침(3글자 채움에 겹침 1621개 관측) ② 대형 다중
페이지 양식의 경계 밀림(page N→N+1) ③ 표 구조 민감도. fit 엔진 개선(가로·세로
예산 측정으로 축소·typed 거부 실동작)은 correctness로 출하하되(단위 증명 +
leap 데모 demo/S-085-wild-formfill/), wild 통과율 자체는 이 3부류가 해결돼야
오르는 잔여 과제로 명명한다. 무음 서식 파괴(조용한 페이지 밀림)는 이제 typed
거부로 대체된다.
릴리스별 히스토리
기계 판독본: corpus-metrics-history.json.
오라클 열은 실제 박스 런이 있었던 릴리스만 채운다(추정 금지).
릴리스(측정 스택) |
일자 |
N |
오픈 |
파싱 |
렌더 |
바이트 |
PII |
|---|---|---|---|---|---|---|---|
3.5.0 (corpus v2) |
2026-07-19~20 |
497 |
100% (476/476) |
96.2% |
416 checked / 43 unavailable / 17 unverified |
100% |
0-leak |
3.4.1 (corpus v2) |
2026-07-19 |
497 |
100% (476/476) |
96.2% |
416 checked / 43 unavailable / 17 unverified |
100% |
0-leak |
2.29.x (corpus v1, FLOOR) |
2026-07-01 |
100 |
100% (100/100) |
95% |
— (미공급) |
— |
— |
방법론 요약
코퍼스 동결: manifest sha256·시드·도구 버전 기록, additive-only(v1 불변 가드). 네거티브 컨트롤(손상 파일 등)이 먼저 판정되어 오라클 자체를 검증한다.
분모 규율: judged-only, unverified 별도 버킷, rule-of-three 하한 병기, vacuous 측정 금지(PII는 PII-보유 스트라텀 위에서만).
재현:
scripts/generate_openrate_corpus.py(생성) →scripts/hancom_open_rate.ps1·scripts/hancom_render_batch.ps1(박스 무인 판정) →scripts/corpus_open_rate.py외 축별 드라이버(집계). 전 과정 영수증(JSONL) 기반.