아래한글 hwp viewer and editor by rust and wasm
This report presents the forensic synthetic code analysis of edwardkim/rhwp, a Rust project with 3,533 GitHub stars. SynthScan v2.0 examined 1,248,869 lines of code across 8075 source files, recording 1923 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 2.7 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1923 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .claude/skills/rhwp-exam-ingest/SKILL.md | 88 | ### Step 1: 입력 정규화 | COMMENT |
| LOW | .claude/skills/rhwp-exam-ingest/SKILL.md | 97 | ### Step 2: Vision 분석 — 페이지별 시험문제 구조 인식 | COMMENT |
| LOW | .claude/skills/rhwp-exam-ingest/SKILL.md | 111 | ### Step 3: ingest.json 작성 | COMMENT |
| LOW | .claude/skills/rhwp-exam-ingest/SKILL.md | 191 | ### Step 4: 이미지 자르기 | COMMENT |
| LOW | .claude/skills/rhwp-exam-ingest/SKILL.md | 204 | ### Step 5: HWPX 빌드 | COMMENT |
| LOW | mydocs/eng/plans/task_403.md | 23 | ### Step 1: HWP Sample Generation Test Framework | COMMENT |
| LOW | mydocs/eng/plans/task_403.md | 29 | ### Step 2: First Sample Set — Basic Width Measurement | COMMENT |
| LOW | mydocs/eng/plans/task_403.md | 40 | ### Step 3: Second Sample Set — Line Break Boundaries | COMMENT |
| LOW | mydocs/eng/plans/task_403.md | 47 | ### Step 4: Third Sample Set — Per Font | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_269.md | 18 | ### Step 1: Cell Selection Phase Management | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_269.md | 25 | ### Step 2: Keyboard Handler Modification | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_269.md | 30 | ### Step 3: Select All Cells UI | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_269.md | 34 | ### Step 4: Table Proportional Resize | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_249.md | 12 | ### Step 1: Multi-Selection | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_249.md | 17 | ### Step 2: Group Objects | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_249.md | 22 | ### Step 3: Ungroup Objects | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_266.md | 18 | ### Step 1: Rust API — Page Hide Insert/Remove | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_266.md | 23 | ### Step 2: WASM Binding + Dialog | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_266.md | 28 | ### Step 3: Control Code Rendering | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_252.md | 22 | ### Step 1: Footnote Insertion WASM API | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_252.md | 28 | ### Step 2: Footnote Area Edit Mode | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_252.md | 34 | ### Step 3: Footnote Deletion + Renumbering | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_256.md | 17 | ### Step 1: Rust Hit-Test + Cursor Rect API | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_256.md | 27 | ### Step 2: cursor.ts Footnote Mode State | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_256.md | 34 | ### Step 3: input-handler Footnote Edit Routing | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_262.md | 27 | #### Step 1: NumberingState Extension (Rust) | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_262.md | 32 | #### Step 2: WASM API | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_262.md | 36 | #### Step 3: Dialog UI Enhancement | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_262.md | 41 | #### Step 4: Context Menu + Shortcut | COMMENT |
| LOW | mydocs/eng/plans/task_e2e_verification.md | 16 | ### Step 1: Scenario Definition | COMMENT |
| LOW | mydocs/eng/plans/task_e2e_verification.md | 36 | ### Step 2: Expected Value Generation | COMMENT |
| LOW | mydocs/eng/plans/task_e2e_verification.md | 79 | ### Step 3: Execution + Measurement | COMMENT |
| LOW | mydocs/eng/plans/task_e2e_verification.md | 116 | ### Step 4: Compare + Verdict | COMMENT |
| LOW | mydocs/eng/plans/task_269_impl.md | 3 | ## Step 1: Cell Selection Phase Management (cursor.ts) | COMMENT |
| LOW | mydocs/eng/plans/task_269_impl.md | 17 | ## Step 2: F5 + Arrow Key Keyboard Handling (input-handler-keyboard.ts) | COMMENT |
| LOW | mydocs/eng/plans/task_269_impl.md | 37 | ## Step 3: Range Expansion + Select All (cursor.ts) | COMMENT |
| LOW | mydocs/eng/plans/task_269_impl.md | 47 | ## Step 4: Table Proportional Resize | COMMENT |
| LOW | mydocs/eng/plans/task_269_impl.md | 63 | ## Step 5: Cell Selection Rendering Update | COMMENT |
| LOW | mydocs/eng/plans/task_m100_22.md | 24 | ### Step 1: Color Token Adoption | COMMENT |
| LOW | mydocs/eng/plans/task_m100_22.md | 37 | ### Step 2: Typography + Spacing Tokens | COMMENT |
| LOW | mydocs/eng/plans/task_m100_22.md | 44 | ### Step 3: Responsive Breakpoints + Layout | COMMENT |
| LOW | mydocs/eng/plans/task_m100_22.md | 64 | ### Step 4: Progressive Migration of Existing Code + Verification | COMMENT |
| LOW | mydocs/eng/plans/task_m100_4.md | 19 | ### Step 1: Change layout_shape_item Return Type and Reflect y_offset | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_390.md | 30 | ### Step 1: Implement line_end Clamp | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_390.md | 34 | ### Step 2: Verification | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_390.md | 40 | ### Step 3: Commit + merge | COMMENT |
| LOW | mydocs/eng/plans/task_403_impl.md | 41 | ### Step 1: Project Scaffolding and Extension Manifest | COMMENT |
| LOW | mydocs/eng/plans/task_403_impl.md | 60 | ### Step 2: Custom Editor Provider + File Loading | COMMENT |
| LOW | mydocs/eng/plans/task_403_impl.md | 85 | ### Step 3: WASM Integration and Single Page Rendering | COMMENT |
| LOW | mydocs/eng/plans/task_403_impl.md | 104 | ### Step 4: Virtual Scroll and Multi-Page View | COMMENT |
| LOW | mydocs/eng/plans/task_403_impl.md | 125 | ### Step 5: Design Document | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_246.md | 20 | ### Step 1: Arrow Rendering | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_246.md | 26 | ### Step 2: Shape Shadow | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_246.md | 31 | ### Step 3: Line Types + Rounded Rectangle | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_246.md | 36 | ### Step 4: Shape Property UI Enhancement | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_m100_5.md | 28 | ### Step 1: Model + Parser | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_m100_5.md | 35 | ### Step 2: Renderer | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_m100_5.md | 41 | ### Step 3: Verification | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_391.md | 25 | ### Step 1: Debug total_content_height — compare actual rendered height vs calculated height | COMMENT |
| LOW⚡ | mydocs/eng/plans/task_391.md | 26 | ### Step 2: Fix underestimation cause (LINE_SEG lh-based fallback or composed height correction) | COMMENT |
| 538 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | rhwp-studio/src/main.ts | 85 | // ─── 커맨드 시스템 ───────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/equation-editor-dialog.ts | 447 | // ── 모드 ────────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/equation-editor-dialog.ts | 461 | // ── 탭 ──────────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/equation-editor-dialog.ts | 496 | // ── 자동완성 ────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/equation-editor-dialog.ts | 586 | // ── 기호 검색 ───────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/equation-editor-dialog.ts | 619 | // ── 템플릿 삽입 ─────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/equation-editor-dialog.ts | 648 | // ── 미리보기 ────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/equation-editor-dialog.ts | 683 | // ── 확인 ────────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/equation-editor-dialog.ts | 716 | // ── 색상 변환 유틸리티 ────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 220 | // ─── 셀 탭 ─────────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 365 | // ─── 표 탭 ─────────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 456 | // ─── 기본 탭 ────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 649 | // ─── 여백/캡션 탭 ────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 794 | // ─── 테두리 탭 ────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 1086 | // ─── 배경 탭 ────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 1243 | // ─── 필드 채우기 ───────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 1463 | // ─── "모두(A)" 일괄 여백 스피너 ───────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/table-cell-props-dialog.ts | 1497 | // ─── DOM 헬퍼 ──────────────────────────────────── | COMMENT |
| MEDIUM | rhwp-studio/src/ui/page-setup-dialog.ts | 306 | // ─── DOM 헬퍼 ───────────────────────────── | COMMENT |
| MEDIUM⚡ | rhwp-studio/src/ui/picture-props-dialog.ts | 2738 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | rhwp-studio/src/ui/picture-props-dialog.ts | 2740 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | rhwp-studio/src/ui/picture-props-dialog.ts | 2749 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | rhwp-studio/src/ui/picture-props-dialog.ts | 2751 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 231 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 233 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 293 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 295 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 412 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 414 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 674 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 676 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 816 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 818 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 976 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 978 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1213 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1215 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1339 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1341 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1477 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1479 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1747 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1749 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1804 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1806 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1868 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1870 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1926 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 1928 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 2312 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/picture-props-dialog.ts | 2314 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 177 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 179 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 268 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 270 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 427 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 429 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 606 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 608 | // ════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | rhwp-studio/src/ui/char-shape-dialog.ts | 781 | // ════════════════════════════════════════════════════════ | COMMENT |
| 290 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/hwpx_form_roundtrip.rs | 1 | //! 양식 개체(FormObject) HWPX 라운드트립 통합 테스트. | COMMENT |
| LOW | tests/issue_1770_hwpx_origin_marker.rs | 1 | //! Issue #1770: rhwp HWPX→HWP 변환본의 pagination 자기정합 — HWPX-origin 마커. | COMMENT |
| LOW | tests/issue_546.rs | 1 | //! Issue #546: exam_science.hwp 2페이지 페이지네이션 회귀 (PR #506 origin). | COMMENT |
| LOW | tests/issue_1195_cell_table_empty_line.rs | 1 | //! Issue #1195: 표 셀 안 빈 줄(줄간격 90%, 글자에 따라) + TAC 표 겹침 회귀 가드. | COMMENT |
| LOW | tests/issue_2098_page_bottom_fixed_anchor_vpos0.rs | 1 | //! Issue #2098: 쪽-하단 고정 틀 앵커의 저장 vpos=0 을 새 쪽 신호로 오독 — 여분 페이지. | COMMENT |
| LOW | tests/issue_1453_chart_3d_ofpie_routing.rs | 1 | //! Issue #1453 (C1a, #1431 Track C): 3D막대·3D원형·ofPie 차트 라우팅 회귀 가드. | COMMENT |
| LOW | tests/issue_826.rs | 1 | //! Issue #826: HWP3 PUA U+F080F / U+F0827 글리프 부재 — 머리말/꼬리말 패턴 시각 차이. | COMMENT |
| LOW | tests/issue_1624_footer_overpush_pagination.rs | 1 | //! Issue #1624: footer(발신명의) Page+Bottom over-push — #1611 vpos 동기화의 +1쪽 부작용. | COMMENT |
| LOW | tests/issue_2151_hwp3_ghost_page.rs | 1 | //! Issue #2151 — HWP3 그림 pgy=0 페이지 시작 후 거짓 쪽 경계(유령 페이지) 핀. | COMMENT |
| LOW | tests/issue_1028_hwpx_textbox_vertical.rs | 1 | //! Task #1028 회귀 가드 — HWPX 글상자 세로쓰기 (`<hp:subList textDirection>`) 파싱 | COMMENT |
| LOW | tests/issue_1058_textbox_list_header.rs | 1 | //! Issue #1058: 한컴편집기 신규 각주 추가 시 본문 다단계 목록 + 글머리표 부작용 회귀 가드. | COMMENT |
| LOW | tests/issue_1058_textbox_list_header.rs | 321 | pos += size; | COMMENT |
| LOW | tests/issue_1488_rowbreak_empty_overlay_pages.rs | 1 | //! Issue #1488: RowBreak 표 셀 내부 빈 오버레이 문단이 여분 빈 연속 페이지를 양산. | COMMENT |
| LOW | tests/issue_1858.rs | 1 | //! [Task #1858] 페이지-절대 앵커(vert=용지/Paper) 개체 flow 소비로 인한 페이지 폭발 회귀 게이트. | COMMENT |
| LOW | tests/issue_1402_enum_token_whitelist.rs | 1 | //! Task #1402 — 열거 속성 표면 표기 정합 검사. | COMMENT |
| LOW | tests/issue_884_charshape_diagnostic.rs | 1 | //! Issue #884 / #915: CharShape `start_pos` 해석 회귀 가드. | COMMENT |
| LOW | tests/issue_595.rs | 1 | //! Issue #595: exam_math.hwp 2페이지부터 수식 더블클릭 hitTest 오동작. | COMMENT |
| LOW | tests/issue_630.rs | 1 | //! Issue #630: aift.hwp 4페이지 목차 `(페이지 표기)` 우측 정렬 회귀 | COMMENT |
| LOW | tests/issue_1050_footnote_serialize.rs | 1 | //! Issue #1050: HWPX → HWP 저장 시 각주 직렬화 한컴 호환 회귀 가드. | COMMENT |
| LOW | tests/issue_2137_topbottom_float_anchor_saved_fit.rs | 1 | //! Issue #2137: TopAndBottom float 전용 앵커의 saved-bounds 신뢰 — 소형 글상자 스필. | COMMENT |
| LOW | tests/issue_2136_neartop_reset_sb2500.rs | 1 | //! Issue #2136: near-top 저장 리셋 상한 2000→2500HU — sb=2500HU 리셋 배제 과적. | COMMENT |
| LOW | tests/issue_2027_picture_wrap_toggle_loss.rs | 1 | //! Issue #2027: 그림 "본문과의 배치" 반복 변경 시 line_segs 미복원 + undo 미기록 (HOP 보고 버그). | COMMENT |
| LOW | tests/issue_table_vpos_01_page5_cell_hit_test.rs | 1 | //! samples/table-vpos-01.hwp 5쪽 인라인 표 셀 클릭 진입 회귀 테스트. | COMMENT |
| LOW | tests/issue_nested_table_border.rs | 1 | //! Nested table 외부 1x1 wrapper 표 외곽 테두리 누락 정정 (exam_social.hwp p1 4번). | COMMENT |
| LOW | tests/issue_nested_table_border.rs | 81 | (get("x1"), get("y1"), get("x2"), get("y2")) | COMMENT |
| LOW | tests/issue_516.rs | 1 | //! Issue #516: rhwp-studio (web Canvas) 그림 워터마크 효과 미적용 + AI 메타정보 | COMMENT |
| LOW | tests/issue_493_hwpx_cell_field_name.rs | 1 | //! Issue #493: HWPX 파서가 `hp:tc name`(셀 필드 이름)을 누락 | COMMENT |
| LOW | tests/visual_roundtrip_baseline.rs | 1 | //! P0-1 — `samples/hwpx/` 전수 **렌더 시각 정합성** baseline 게이트. | COMMENT |
| LOW | tests/issue_2083_hide_fill_page_background.rs | 1 | //! Issue #2083: `hide_fill`(쪽 배경 감추기) 페이지가 export-png 에서 전체 검정으로 렌더. | COMMENT |
| LOW | tests/issue_775.rs | 1 | //! Issue #775: Task #703 회귀 — `samples/exam_eng.hwp` 4페이지 27번 보기 그림 (1×1 InFrontOfText 표) | COMMENT |
| LOW | tests/issue_2019_floating_form_overpagination.rs | 1 | //! Issue #2019: 부동 개체(글상자·도형·표) 다수 별지 서식의 과분할 smoke guard. | COMMENT |
| LOW | tests/issue_2071_cell_anchor_picture_valign.rs | 1 | //! Issue #2071: 셀 앵커 floating 그림(restrict-ON, TopAndBottom+Para)이 셀 | COMMENT |
| LOW | tests/issue_1082_endnote_multicolumn_drift.rs | 1 | //! Issue #1082: 다단(2단) 미주(endnote) 영역에서 typeset 누적이 미주 para 내부 vpos span 만 | COMMENT |
| LOW | tests/hwp5_roundtrip_baseline.rs | 1 | //! Task #1552 — `samples/*.hwp` 전수 HWP5 roundtrip 무손실 baseline 게이트. | COMMENT |
| LOW | tests/issue_2097_rowbreak_midpage_declared_fits.rs | 1 | //! Issue #2097 잔존 백로그: 중간-쪽 RowBreak 표 선언-fit 무시 — 마지막 행 sliver 분할. | COMMENT |
| LOW | tests/tab_cross_run.rs | 1 | //! Cross-run tab detection regression tests — Task #290. | COMMENT |
| LOW | tests/issue_1061_equation_serialize.rs | 1 | //! Issue #1061: HWPX 수식 저장 회귀 가드. | COMMENT |
| LOW | tests/issue_1842.rs | 1 | //! Issue #1842 — 서식 표 셀 내부 인라인 개체 라인높이: 저장 LINE_SEG lh 재계산 드리프트. | COMMENT |
| LOW | tests/issue_1842.rs | 81 | } | COMMENT |
| LOW | tests/issue_1785_cell_padding_rule_consistency.rs | 1 | //! Issue #1785: 셀 안 여백 선택 규칙은 레이아웃과 높이 측정이 단일 출처를 공유해야 한다. | COMMENT |
| LOW | tests/issue_1611_footer_page_bottom_pagination.rs | 1 | //! Issue #1611: 렌더링 −1쪽 갭 요인 B — footer(발신명의) PAGE-앵커 블록 page-fit 누적 과소. | COMMENT |
| LOW | tests/issue_1916_tbl_common_attr.rs | 1 | //! Issue #1916: raw_ctrl_data 미보존 HWP5 표의 CommonObjAttr 왕복 소실 회귀 가드. | COMMENT |
| LOW | tests/issue_418.rs | 1 | //! Issue #418: hwpspec.hwp 20/21 페이지의 빈 문단 + TAC Picture 가 | COMMENT |
| LOW | tests/issue_2007_nested_cell_pagination.rs | 1 | //! Issue #2007: 1×1 단일 셀 중첩 표의 셀 콘텐츠 페이지 분할(intra-cell pagination). | COMMENT |
| LOW | tests/issue_1853.rs | 1 | //! [Task #1853] 같은 문단 float 스택 이월 규칙(#1831/PR #1844) 회귀 게이트. | COMMENT |
| LOW | tests/issue_1880_takeplace_host_before.rs | 1 | //! Issue #1880: convert-HWP 자리차지 표 `host_spacing.before` 비대칭 — pagination 자기정합. | COMMENT |
| LOW | tests/diag_1042_table_row_height.rs | 1 | //! Stage 4 v3: k-water-rfp 의 표 row height 측정 over-estimate 정량 진단 | COMMENT |
| LOW | tests/issue_1172_para_margin_roundtrip.rs | 1 | //! Issue #1172: rhwp-studio 문단모양 왼쪽 여백 round-trip 2배 결함. | COMMENT |
| LOW | tests/issue_1385_replace_export_roundtrip.rs | 1 | //! Issue #1385: replaceAll/replaceText 변경이 exportHwp 직렬화에 반영되지 않음 | COMMENT |
| LOW | tests/issue_2015_saved_bounds_rowbreak.rs | 1 | //! Issue #2015: HWPX saved-bounds RowBreak 표 잔존 드리프트 (#1811 후속). | COMMENT |
| LOW | tests/issue_2105_rowbreak_table_declared_fits.rs | 1 | //! Issue #2105: RowBreak 표 선언-fit 무시 — 실측 팽창으로 불필요 행 sliver 분할. | COMMENT |
| LOW | tests/issue_1772_table_outer_margin_sync.rs | 1 | //! Issue #1772: HWPX 파서는 표 outMargin 을 common.margin 에도 동기화해야 한다 (IR 계약). | COMMENT |
| LOW | tests/issue_1658_page_bottom_fixed_exclusion.rs | 1 | //! [Task #1658 v3] 페이지 하단 고정 표(vert=쪽·valign=Bottom 자리차지, 결재/서명 틀)의 | COMMENT |
| LOW | tests/issue_1152_intra_para_vpos_reset.rs | 1 | //! Issue #1152: 호스트 문단 내 TAC 표 line_seg vpos=0 (intra-paragraph vpos-reset) | COMMENT |
| LOW | tests/issue_874_ktx_toc_page_number_right_align.rs | 1 | //! Task #874 후속 (PR #1021): KTX.hwp 목차 페이지번호 — 단일-run RIGHT + leader | COMMENT |
| LOW | tests/issue_1835_tac_stale_height.rs | 1 | //! Issue #1835: TAC 표에서 셀 내용이 저장 높이(common.height)를 크게(>1.5×) 초과하면 | COMMENT |
| LOW | tests/issue_1355_endnote_title_gap_double.rs | 1 | //! Issue #1355: 해설(미주) 문제-제목 앞 세로 여백 이중계상 회귀 가드. | COMMENT |
| LOW | tests/issue_2097_1730000_real_doc_pin.rs | 1 | //! Issue #2097 — 실문서(1730000 선정 결과보고서) 페이지네이션 한글 정합 핀. | COMMENT |
| LOW | tests/issue_1073_nested_table_split.rs | 1 | //! Issue #1073: 셀 안의 페이지보다 큰 중첩 표(nested table)가 페이지 경계에서 중첩 표 | COMMENT |
| LOW | tests/hwpx_roundtrip_integration.rs | 1 | //! HWPX 라운드트립 통합 테스트. | COMMENT |
| 599 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | src/wasm_api.rs | 5586 | let base_style = self.core.document.doc_info.styles.first(); | CODE |
| CRITICAL⚡ | src/wasm_api.rs | 5594 | .filter(|id| (*id as usize) < self.core.document.doc_info.char_shapes.len()) | CODE |
| CRITICAL⚡ | src/wasm_api.rs | 5599 | .filter(|id| (*id as usize) < self.core.document.doc_info.para_shapes.len()) | CODE |
| CRITICAL | src/wasm_api.rs | 5456 | self.core.document.doc_info.char_shapes.push(new_cs); | CODE |
| CRITICAL | src/wasm_api.rs | 5457 | let new_id = (self.core.document.doc_info.char_shapes.len() - 1) as u16; | CODE |
| CRITICAL | src/wasm_api.rs | 5473 | self.core.document.doc_info.para_shapes.push(new_ps); | CODE |
| CRITICAL | src/wasm_api.rs | 5474 | let new_id = (self.core.document.doc_info.para_shapes.len() - 1) as u16; | CODE |
| CRITICAL | src/wasm_api.rs | 5612 | self.core.document.doc_info.styles.push(new_style); | CODE |
| CRITICAL | src/wasm_api.rs | 5614 | let new_id = (self.core.document.doc_info.styles.len() - 1) as i32; | CODE |
| CRITICAL | src/wasm_api.rs | 5646 | self.core.document.doc_info.styles.remove(style_id as usize); | CODE |
| CRITICAL | src/wasm_api.rs | 5768 | self.core.document.doc_info.numberings.push(n); | CODE |
| CRITICAL | src/wasm_api.rs | 5829 | self.core.document.doc_info.numberings.push(n); | CODE |
| CRITICAL | src/wasm_api.rs | 5830 | self.core.document.doc_info.numberings.len() as u16 | CODE |
| CRITICAL | src/wasm_api.rs | 5854 | self.core.document.doc_info.bullets.push(b); | CODE |
| CRITICAL | src/wasm_api.rs | 5855 | self.core.document.doc_info.bullets.len() as u16 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rhwp-studio/tests/table-delete-cursor-1483.test.ts | 15 | const start = tableCmd.indexOf('function applyTableDeleteRowColumn('); | CODE |
| LOW | rhwp-studio/tests/table-delete-cursor-1483.test.ts | 26 | const end = tableCmd.indexOf('function applyTableDeleteRowColumn(', start); | CODE |
| LOW | rhwp-studio/tests/table-mouse-resize-1491.test.ts | 13 | function cellSelectionMouseDownBlock(): string { | CODE |
| LOW | rhwp-studio/tests/table-mouse-resize-1491.test.ts | 31 | function generalTableResizeMouseDownBlock(): string { | CODE |
| LOW | rhwp-studio/tests/table-mouse-resize-1491.test.ts | 40 | function resolveTableResizeHitBlock(): string { | CODE |
| LOW | rhwp-studio/src/main.ts | 159 | function autosaveScheduleFromUserSettings(): AutosaveScheduleSettings { | CODE |
| LOW | rhwp-studio/src/main.ts | 708 | function applySavedTextMarkSettings(): void { | CODE |
| LOW | rhwp-studio/src/main.ts | 867 | function shouldSkipInitialAutosaveRecovery(): boolean { | CODE |
| LOW | rhwp-studio/src/main.ts | 872 | async function offerAutosaveRecoveryIfIdle(): Promise<void> { | CODE |
| LOW | rhwp-studio/src/main.ts | 928 | async function canReplaceCurrentDocument(skipUnsavedGuard?: boolean): Promise<boolean> { | CODE |
| LOW | rhwp-studio/src/main.ts | 1035 | async function isFileSchemeAccessAllowed(): Promise<boolean | null> { | CODE |
| LOW | rhwp-studio/src/main.ts | 1054 | function showFileUrlAccessGuidance(): void { | CODE |
| LOW | rhwp-studio/src/ui/local-fonts-modal.ts | 210 | export async function showLocalFontsModalIfNeeded( | CODE |
| LOW | rhwp-studio/src/ui/options-dialog.ts | 377 | function describeLocalFontDetectionError(error: unknown): string { | CODE |
| LOW | rhwp-studio/src/ui/validation-modal.ts | 199 | export async function showValidationModalIfNeeded( | CODE |
| LOW | rhwp-studio/src/ui/endnote-shape-dialog.ts | 69 | function normalizeEndnotePlacement(value: string | undefined | null): 'documentEnd' | 'sectionEnd' { | CODE |
| LOW | rhwp-studio/src/ui/endnote-shape-dialog.ts | 87 | function normalizeEndnoteNumbering(value: string | undefined | null): 'continue' | 'restartSection' { | CODE |
| LOW | rhwp-studio/src/core/wasm-bridge.ts | 63 | function installCanvasFontSubstitution(): void { | CODE |
| LOW | rhwp-studio/src/core/document-font-status.ts | 154 | export function shouldPromptLocalFontAccess(report: DocumentFontStatusReport): boolean { | CODE |
| LOW | rhwp-studio/src/core/font-substitution.ts | 310 | export function fontFamilyChainForDisplay( | CODE |
| LOW | rhwp-studio/src/core/local-fonts.ts | 109 | export function isLocalFontAccessSupported(): boolean { | CODE |
| LOW | rhwp-studio/src/core/local-fonts.ts | 114 | export function isFontPresenceProbeSupported(): boolean { | CODE |
| LOW | rhwp-studio/src/core/local-fonts.ts | 127 | export function getLocalFontDetectionMethod(): LocalFontDetectionSource | null { | CODE |
| LOW | rhwp-studio/src/core/document-signature.ts | 55 | export function assertRemoteDocumentBytes(bytes: Uint8Array, contentType?: string | null): void { | CODE |
| LOW | rhwp-studio/src/core/extension-settings.ts | 121 | export async function loadExtensionViewerSettings(): Promise<ExtensionViewerSettings> { | CODE |
| LOW | rhwp-studio/src/recovery/recovery-ui.ts | 119 | export function showAutosaveRecoveryDialog(drafts: AutosaveDraft[]): Promise<AutosaveRecoveryChoice> { | CODE |
| LOW | rhwp-studio/src/recovery/recovery-format.ts | 3 | function baseNameWithoutKnownExtension(fileName: string): string { | CODE |
| LOW | rhwp-studio/src/hwpctl/actions/table-edit.ts | 15 | function executeTableInsertRowColumn(ctrl: HwpCtrl, set: ParameterSet | null): boolean { | CODE |
| LOW | rhwp-studio/src/hwpctl/actions/table-edit.ts | 36 | function executeTableDeleteRowColumn(ctrl: HwpCtrl, set: ParameterSet | null): boolean { | CODE |
| LOW | rhwp-studio/src/hwpctl/actions/table-edit.ts | 97 | function executeTablePropertyDialog(ctrl: HwpCtrl, set: ParameterSet | null): boolean { | CODE |
| LOW | rhwp-studio/src/view/grid-overlay.ts | 39 | export function createGridClipCornerOverlay( | CODE |
| LOW | rhwp-studio/src/view/grid-settings.ts | 64 | export function convertGridOffsetForOrigin( | CODE |
| LOW | rhwp-studio/src/view/glyph-outline-payload-status.ts | 37 | export function glyphOutlinePayloadStatus( | CODE |
| LOW | rhwp-studio/src/view/glyph-outline-payload-status.ts | 70 | export function glyphOutlinePayloadResourceKey(op: LayerGlyphOutlineOp): string | null { | CODE |
| LOW | rhwp-studio/src/view/glyph-outline-payload-status.ts | 242 | function hasColorLayersResourceKeyContract(op: LayerGlyphOutlineOp): boolean { | CODE |
| LOW | rhwp-studio/src/view/glyph-outline-payload-status.ts | 313 | function isValidColorGradientStops(stops: Array<{ offset?: number; color?: { rgba?: number[] } }> | undefined): boolean | CODE |
| LOW | rhwp-studio/src/view/glyph-outline-payload-status.ts | 333 | function isSupportedFullCircleSweepGradient( | CODE |
| LOW | rhwp-studio/src/view/glyph-outline-payload-status.ts | 347 | function hasExclusivePayloadFamily(op: LayerGlyphOutlineOp, payloadKind: string): boolean { | CODE |
| LOW | rhwp-studio/src/view/render-backend.ts | 61 | export function resolveRenderBackendRequest(search = ''): RenderBackendRequest { | CODE |
| LOW⚡ | rhwp-studio/src/view/render-backend.ts | 82 | export function resolveCanvasKitRenderMode(search = ''): CanvasKitRenderMode { | CODE |
| LOW⚡ | rhwp-studio/src/view/render-backend.ts | 89 | export function persistCanvasKitRenderMode(value: CanvasKitRenderMode): void { | CODE |
| LOW⚡ | rhwp-studio/src/view/render-backend.ts | 93 | export function resolveCanvasKitSurfaceRequest(search = ''): CanvasKitSurfaceRequest { | CODE |
| LOW | rhwp-studio/src/view/canvaskit/image-replay.ts | 119 | export function canvasKitImageFillModeTiles(fillMode: string | undefined): boolean { | CODE |
| LOW | rhwp-studio/src/compare/diff-location-label.ts | 14 | export function formatParagraphLocationForSide(item: DiffItem, side: 'left' | 'right'): string | null { | CODE |
| LOW | rhwp-studio/src/compare/diff-location-label.ts | 40 | export function formatDiffLocationCombined(item: DiffItem): string | null { | CODE |
| LOW⚡ | rhwp-studio/src/compare/diff-engine.ts | 1300 | function isEffectivelyEmptyParaNormalized(normalizedText: string): boolean { | CODE |
| LOW⚡ | rhwp-studio/src/compare/diff-engine.ts | 1310 | function shouldSuppressNoiseParagraphOnly(p: CompareParaSnapshot): boolean { | CODE |
| LOW⚡ | rhwp-studio/src/compare/diff-engine.ts | 1315 | function stripNoiseOnlyParagraphAlignSteps(steps: ParagraphAlignStep[]): ParagraphAlignStep[] { | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 267 | function isStructuralBlockTitleLine(trimmedOneLine: string): boolean { | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 304 | function levenshteinDistanceTwoRow(a: string, b: string): number { | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 639 | function extractControlIndexFromKey(key: string): number | null { | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 657 | function buildRightToLeftParaMapFromAligned(aligned: AlignedPair[]): Map<string, CompareParaSnapshot> { | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 709 | function buildGranularControlDiffs( | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 782 | function compactParaShapeForAnchor(pp: ParaProperties): string { | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 797 | function tryResolveCompareParaAnchorFromCursor( | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 831 | function fillMissingParaAnchorsFromPageLayout( | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 873 | function fillMissingParaAnchorsFromNeighbors( | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 1453 | function resolveTextCompareStrategy( | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 1566 | function buildUniqueSigPairsInSlices( | CODE |
| LOW | rhwp-studio/src/compare/diff-engine.ts | 1616 | function buildBothSidesUniqueTrimNorm(left: CompareParaSnapshot[], right: CompareParaSnapshot[]): Set<string> { | CODE |
| 98 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/verify_hwpx.py | 72 | except Exception: | CODE |
| LOW | tools/probe_ls_ladder.py | 37 | except Exception: | CODE |
| LOW | tools/probe_ls_ladder.py | 67 | except Exception: | CODE |
| LOW | tools/roundtrip_fidelity_harness.py | 48 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tools/verify_hangul_pages.py | 39 | except Exception: | CODE |
| LOW | tools/verify_hangul_pages.py | 112 | except Exception: | CODE |
| LOW | tools/verify_hangul_pages.py | 193 | except Exception: | CODE |
| LOW | tools/verify_hangul_pages.py | 199 | except Exception: | CODE |
| LOW | tools/verify_hangul_pages.py | 211 | except Exception as exc: # 파일별 격리 | CODE |
| LOW | tools/verify_hangul_pages.py | 228 | except Exception: | CODE |
| LOW | tools/verify_hangul_pages.py | 233 | except Exception: | CODE |
| MEDIUM | tools/verify_hangul_pages.py | 32 | def git_head() -> str: | CODE |
| MEDIUM | tools/verify_hangul_pages.py | 85 | def run(pairs, out_tsv, visible, use_pdf, resume=False) -> int: | CODE |
| LOW | tools/verify_pi_page_roundtrip.py | 54 | except Exception: | CODE |
| LOW | tools/verify_pi_page_roundtrip.py | 71 | except Exception as e: # noqa: BLE001 | CODE |
| MEDIUM | tools/verify_pi_page_roundtrip.py | 47 | def git_head() -> str: | CODE |
| LOW | tools/hangul_row_heights2.py | 53 | except Exception: | CODE |
| LOW | tools/hangul_row_heights2.py | 70 | except Exception: | CODE |
| LOW | tools/build_page_oracle.py | 62 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tools/build_page_oracle.py | 68 | except Exception: | CODE |
| LOW | tools/build_page_oracle.py | 80 | except Exception: | CODE |
| LOW | tools/build_page_oracle.py | 85 | except Exception: | CODE |
| LOW | tools/metric_drift_survey.py | 72 | except Exception: # noqa: BLE001 — find_tables 개별 실패 격리 | CODE |
| LOW | tools/metric_drift_survey.py | 181 | except Exception as e: # noqa: BLE001 — 파일별 격리 | CODE |
| LOW | tools/metric_drift_survey.py | 187 | except Exception: | CODE |
| LOW | tools/metric_drift_survey.py | 242 | except Exception: | CODE |
| LOW | tools/render_page_gate.py | 30 | except Exception: | CODE |
| LOW | tools/probe_width_ladder.py | 43 | except Exception: | CODE |
| LOW | tools/probe_width_ladder.py | 72 | except Exception: | CODE |
| LOW | tools/verify_pi_page_vs_hangul.py | 61 | except Exception: | CODE |
| LOW | tools/verify_pi_page_vs_hangul.py | 70 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tools/verify_pi_page_vs_hangul.py | 168 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 223 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 232 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 237 | except Exception: | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 260 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 266 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 272 | except Exception: | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 336 | except Exception: | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 340 | except Exception: | CODE |
| LOW⚡ | tools/verify_pi_page_vs_hangul.py | 345 | except Exception: | CODE |
| MEDIUM | tools/verify_pi_page_vs_hangul.py | 57 | def git_head() -> str: | CODE |
| MEDIUM | tools/object_visual_regression.py | 55 | def git_head() -> str: | CODE |
| MEDIUM | tools/object_visual_regression.py | 229 | def crop(png_by_page, obj, outdir, tag): | CODE |
| LOW⚡ | tools/object_visual_regression.py | 59 | except Exception: | CODE |
| LOW⚡ | tools/object_visual_regression.py | 75 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | tools/object_visual_regression.py | 212 | except Exception: # noqa: BLE001 | CODE |
| LOW⚡ | tools/object_visual_regression.py | 220 | except Exception: # noqa: BLE001 | CODE |
| LOW | tools/object_visual_regression.py | 123 | except Exception: # noqa: BLE001 | CODE |
| LOW | tools/object_visual_regression.py | 142 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tools/object_visual_regression.py | 176 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tools/object_visual_regression.py | 197 | except Exception: # noqa: BLE001 | CODE |
| LOW | tools/object_visual_regression.py | 248 | except Exception: # noqa: BLE001 | CODE |
| LOW | output/poc/task2019/capture_pages.py | 15 | except Exception as e: | CODE |
| MEDIUM | output/poc/task2019/capture_pages.py | 10 | def pages(f): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/renderer/mod.rs | 469 | // Step 1: (x1', y1') 계산 | COMMENT |
| LOW⚡ | src/renderer/mod.rs | 475 | // Step 2: 반지름 보정 (너무 작은 경우 확대) | COMMENT |
| LOW⚡ | src/renderer/mod.rs | 487 | // Step 3: 중심점' (cx', cy') 계산 | COMMENT |
| LOW⚡ | src/renderer/mod.rs | 495 | // Step 4: 중심점 (cx, cy) 계산 | COMMENT |
| LOW⚡ | src/renderer/mod.rs | 499 | // Step 5: θ1 (시작 각도), dθ (호 각도) 계산 | COMMENT |
| LOW | src/document_core/queries/doc_tree_nav.rs | 393 | // Step 1: 현재 문단 내 탐색 | COMMENT |
| LOW | src/document_core/queries/doc_tree_nav.rs | 639 | // Step 2: 같은 컨테이너의 다음/이전 문단 | COMMENT |
| LOW | src/document_core/queries/doc_tree_nav.rs | 712 | // Step 3: 컨테이너 탈출 | COMMENT |
| LOW | src/document_core/queries/doc_tree_nav.rs | 765 | // Step 4: Body 수준 — 다음/이전 섹션 | COMMENT |
| LOW⚡ | src/wasm_api/tests.rs | 8340 | // Step 1: Re-serialize WITHOUT paste (just clear raw_stream) | COMMENT |
| LOW⚡ | src/wasm_api/tests.rs | 8349 | // Step 2: Re-parse the saved file | COMMENT |
| LOW | src/wasm_api/tests.rs | 8361 | // Step 3: Compare record counts | COMMENT |
| LOW | src/wasm_api/tests.rs | 8416 | // Step 4: Check that PARA_HEADER char_count matches PARA_TEXT existence | COMMENT |
| LOW⚡ | src/wasm_api/tests.rs | 8695 | // Step 1: After parsing | COMMENT |
| LOW⚡ | src/wasm_api/tests.rs | 8704 | // Step 2: After convert_to_editable | COMMENT |
| LOW⚡ | src/wasm_api/tests.rs | 8713 | // Step 3: Export without paste | COMMENT |
| LOW⚡ | src/wasm_api/tests.rs | 8721 | // Step 4: Paste simple table | COMMENT |
| LOW | src/wasm_api/tests.rs | 8736 | // Step 5: Export after paste | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/verify_hwpx.py | 14 | CODE | |
| LOW | tools/roundtrip_fidelity_harness.py | 26 | CODE | |
| LOW | tools/compare_line_baselines.py | 16 | CODE | |
| LOW | tools/hangul_pdf_baseline.py | 17 | CODE | |
| LOW | tools/hangul_pdf_baseline.py | 20 | CODE | |
| LOW | tools/verify_hangul_pages.py | 21 | CODE | |
| LOW | tools/verify_pi_page_roundtrip.py | 30 | CODE | |
| LOW | tools/hangul_row_heights2.py | 16 | CODE | |
| LOW | tools/build_page_oracle.py | 13 | CODE | |
| LOW | tools/metric_drift_survey.py | 23 | CODE | |
| LOW | tools/valign_offset_gate.py | 15 | CODE | |
| LOW | tools/render_page_gate.py | 8 | CODE | |
| LOW | tools/roundtrip_fidelity_diff.py | 17 | CODE | |
| LOW | tools/hangul_row_heights.py | 15 | CODE | |
| LOW | tools/clipping_gate.py | 17 | CODE | |
| LOW | tools/compare_page_bbox.py | 18 | CODE | |
| LOW | tools/verify_pi_page_vs_hangul.py | 41 | CODE | |
| LOW | tools/detect_table_clipping.py | 17 | CODE | |
| LOW | tools/detect_table_clipping.py | 20 | CODE | |
| LOW | tools/roundtrip_control_compare.py | 14 | CODE | |
| LOW | tools/verify_all.py | 10 | CODE | |
| LOW | tools/object_visual_regression.py | 23 | CODE | |
| LOW | scripts/task1363_ssot_diff.py | 18 | CODE | |
| LOW | scripts/visual_oracle_native.py | 30 | CODE | |
| LOW | scripts/renderer_baseline.py | 2 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 4 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/roundtrip_fidelity_harness.py | 90 | CODE | |
| LOW | tools/hangul_pdf_baseline.py | 32 | CODE | |
| LOW | tools/verify_hangul_pages.py | 85 | CODE | |
| LOW | tools/hangul_row_heights2.py | 30 | CODE | |
| LOW | tools/build_page_oracle.py | 23 | CODE | |
| LOW | tools/metric_drift_survey.py | 53 | CODE | |
| LOW | tools/metric_drift_survey.py | 137 | CODE | |
| LOW | tools/verify_pi_page_vs_hangul.py | 174 | CODE | |
| LOW | tools/patch_cell_flags.py | 26 | CODE | |
| LOW | tools/patch_cell_flags.py | 59 | CODE | |
| LOW | tools/reduction_potential.py | 48 | CODE | |
| LOW | tools/reduction_potential.py | 71 | CODE | |
| LOW | tools/reduction_potential.py | 110 | CODE | |
| LOW | tools/reduction_potential.py | 131 | CODE | |
| LOW | tools/object_visual_regression.py | 160 | CODE | |
| LOW | tools/object_visual_regression.py | 271 | CODE | |
| LOW | .claude/skills/rhwp-exam-ingest/helpers/extract_docx.py | 18 | CODE | |
| LOW | scripts/task1363_ssot_diff.py | 137 | CODE | |
| LOW | scripts/renderer_baseline.py | 309 | CODE | |
| LOW | scripts/renderer_baseline.py | 436 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 209 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 1184 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 1567 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 1628 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 1752 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 1821 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 2147 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 1574 | CODE | |
| LOW | scripts/task1274_visual_sweep.py | 1834 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | mydocs/plans/archives/task_m100_484.md | 9 | - 이슈 #484 — 외부 binding (`rhwp-python`) 의 IR / RAG character run 정규화 hot path 에서 `char_shape.start_pos` (UTF-16 단위) 를 cod | CODE |
| MEDIUM | mydocs/feedback/rag_hwp_strategy.md | 106 | ### 6. HWP 파서 비교 (2026년 4월 기준, RAG 적합성 중심) | COMMENT |
| MEDIUM | mydocs/report/archives/rag_feature_analysis.md | 1 | # HWP RAG 전처리 요구사항 분석 및 rhwp 대응 방향 | COMMENT |
| MEDIUM | mydocs/report/archives/rag_feature_analysis.md | 333 | ### R6. RAG 프레임워크 직접 연동 (Python 인터페이스) | COMMENT |
| MEDIUM | mydocs/orders/20260510.md | 17 | | **PR #769 (Refs #536)** | render — improve Skia text replay parity (P9) | **완료 (옵션 A — P8 skip + P9 2 commits cherry-p | CODE |
| MEDIUM | mydocs/orders/20260413.md | 29 | | Discussion #114 | RAG 기능 아이디어 커뮤니티 게시 | 완료 | Ideas 카테고리 | | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rhwp-studio/src/core/types.ts | 1141 | type: 'placeholder'; | CODE |
| LOW | rhwp-studio/src/view/canvaskit-renderer.ts | 323 | case 'placeholder': | CODE |
| LOW⚡ | web/index.html | 38 | <p class="placeholder">HWP 파일을 선택하세요.</p> | CODE |
| LOW⚡ | web/index.html | 45 | <p class="placeholder">파일을 로드하면 SVG가 여기에 표시됩니다.</p> | CODE |
| LOW⚡ | web/index.html | 51 | <p class="placeholder" id="canvas-placeholder">파일을 로드하면 Canvas가 여기에 표시됩니다.</p> | CODE |
| LOW | web/editor.html | 321 | <p class="placeholder" id="editor-placeholder">HWP 파일을 선택하세요.</p> | CODE |
| LOW | src/renderer/canvaskit_policy.rs | 382 | direct_item(path, "placeholder", CanvasKitReplayFeature::Placeholder); | CODE |
| LOW | src/renderer/canvaskit_policy.rs | 604 | PaintOp::Placeholder { .. } => "placeholder", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/issue_505.rs | 80 | // 메트릭 변화에 robust. 결함 reverted 시 ratio=1.00 으로 떨어져 fail. | COMMENT |