# drawNET Bug Report - 2026-03-21 ๐Ÿž ์ด ๋ฌธ์„œ๋Š” 2026๋…„ 3์›” 21์ผ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ ๋ฐ ์žฅ์• ์™€ ๊ทธ์— ๋”ฐ๋ฅธ ์กฐ์น˜ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. --- ### [Instance #2255] - Sidebar Focus Loss & Explicit Save Refactoring - **ํ˜„์ƒ**: ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ๋ผ๋ฒจ ์ˆ˜์ • ์‹œ ํฌ์ปค์Šค ์œ ์‹ค๋กœ ์ธํ•œ ํƒ€์ดํ•‘ ๋ถˆ๊ฐ€๋Šฅ ํ˜„์ƒ ๋ฐ ์ž๋™ ์ €์žฅ์— ์˜ํ•œ ์˜๋„์น˜ ์•Š์€ ๋ฐ์ดํ„ฐ ๊ฒฝํ•ฉ ๊ฐ€๋Šฅ์„ฑ ์ œ๊ธฐ. - **์›์ธ**: ์‹ค์‹œ๊ฐ„ `input` ๋ฐ ์ž๋™ `change`(blur) ์ด๋ฒคํŠธ๊ฐ€ ์‹œ๊ฐ ์†์„ฑ ๋ณ€๊ฒฝ ๋ฆฌ์Šค๋„ˆ์™€ ์ถฉ๋Œํ•˜์—ฌ DOM ๋ฆฌ๋ Œ๋”๋ง ๋ฐœ์ƒ. - **์กฐ์น˜**: 1. **๋ช…์‹œ์  ์ €์žฅ ๋ชจ๋ธ(Explicit Apply)** ๋„์ž…: ํ…์ŠคํŠธ ๊ด€๋ จ ํ•„๋“œ๋Š” ์˜ค์ง **Enter** ๋˜๋Š” **[์ ์šฉ]** ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ์—๋งŒ ์ €์žฅ๋˜๋„๋ก ๋ณ€๊ฒฝํ•˜์—ฌ ์ž…๋ ฅ ์ค‘ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ. 2. ์‚ฌ์ด๋“œ๋ฐ” ๋‚ด๋ถ€ ์š”์†Œ์— ํฌ์ปค์Šค๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๊ทธ๋ž˜ํ”„ ์™ธ๋ถ€ ๋ณ€ํ™”์— ์˜ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜์—ฌ ํฌ์ปค์Šค ์—ฐ์†์„ฑ ํ™•๋ณด. - **ํ˜„์ƒ**: ๋ผ๋ฒจ ์œ„์น˜๋ฅผ "ํ•˜(bottom)"๋กœ ์„ค์ •ํ•ด๋„ ์ €์žฅ ํ›„ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋‹ค์‹œ "์ƒ(top)"์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ. - **์›์ธ**: `layers.js` ๋‚ด๋ถ€์— ๋ผ๋ฒจ ์œ„์น˜ ๊ธฐ๋ณธ๊ฐ’์ด `bottom`์œผ๋กœ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ๊ฐ•์ œ ์ ์šฉ๋˜์—ˆ์œผ๋ฉฐ, ์ผ๋ถ€ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ `label_pos` ๋ฐ์ดํ„ฐ ์ฃผ์ž… ๋ˆ„๋ฝ. - **์กฐ์น˜**: `layers.js` ํ•˜๋“œ์ฝ”๋”ฉ ์ œ๊ฑฐ, `system.js`์—์„œ ์ƒ์„ฑ ์‹œ ๊ธฐ๋ณธ๊ฐ’(์žฅ๋น„-ํ•˜, ๊ทธ๋ฃน-์ƒ) ๊ฐ•์ œ ์ฃผ์ž…, ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ๋ณด๊ฐ•์„ ํ†ตํ•œ ์ •ํ•ฉ์„ฑ ํ™•๋ณด. ### [Instance #2245] - Sidebar Display Stale During Group Rename (Recursive & Logic Fix) - **ํ˜„์ƒ**: ๊ทธ๋ฃน ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด๋„ ํ•ด๋‹น ๊ทธ๋ฃน์— ์†ํ•œ ํ•˜์œ„ ๊ฐœ์ฒด์˜ ์‚ฌ์ด๋“œ๋ฐ” ๋‚ด [์ƒ์œ„] ์ •๋ณด๊ฐ€ ์ฆ‰์‹œ ๋ฐ”๋€Œ์ง€ ์•Š์Œ. - **์›์ธ**: 1. **์ €์žฅ ์กฐ๊ฑด๋ถ€ ๋ˆ„๋ฝ**: ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์€ ๋‹จ์ˆœ ์†์„ฑ(์ด๋ฆ„ ๋“ฑ) ๋ณ€๊ฒฝ ์‹œ `saveUpdates` ํ˜ธ์ถœ์ด ๋ˆ„๋ฝ๋˜์–ด ์ €์žฅ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Œ. 2. **ํฌ์ปค์Šค ๊ฐ€๋“œ ์ถฉ๋Œ**: ์‚ฌ์ด๋“œ๋ฐ” ๋‚ด๋ถ€์—์„œ ํŽธ์ง‘ ์ค‘์ผ ๋•Œ ๋ฆฌ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜๋Š” ๋กœ์ง์ด ์ ์šฉ(Apply) ์‹œ์ ์˜ ๊ฐฑ์‹ ๋งˆ์ € ๋ง‰์•„๋ฒ„๋ฆผ. 3. **๋น„๋™๊ธฐ ํƒ€์ดํ•‘ ๋ถˆ์ผ์น˜**: ์—”์ง„์˜ ๋ฐ์ดํ„ฐ ํ™•์ • ์ „ UI ๋ Œ๋”๋ง ์‹œ๋„๋กœ ์ธํ•œ ๊ตฌํ˜• ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ. - **์กฐ์น˜**: 1. `handleNodeUpdate` ๋‚ด ์ €์žฅ ๋กœ์ง์„ ํ‰ํƒ„ํ™”ํ•˜์—ฌ **์†์„ฑ ๋ณ€๊ฒฝ ์‹œ ํ•ญ์ƒ ์ €์žฅ**๋˜๋„๋ก ์ˆ˜์ •. 2. **์žฌ๊ท€์  ์ „ํŒŒ(Recursive Propagation)** ๋„์ž…: ๊ทธ๋ฃน๋ช… ๋ณ€๊ฒฝ ์‹œ ํ•˜์œ„ ๋ชจ๋“  ๊ฐœ์ฒด(`getDescendants`)์— ๋™๊ธฐํ™” ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ํ•˜์œ„ ๊ฐœ์ฒด๋“ค์˜ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ•์ œ ํŠธ๋ฆฌ๊ฑฐํ•จ. 3. `safeRender` ํฌ์ปค์Šค ๊ฐ€๋“œ ์ตœ์ ํ™”: `INPUT/TEXTAREA`๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ๋งŒ ์Šคํ‚ตํ•˜๋„๋ก ์ •๊ทœํ™”ํ•˜๊ณ  `setTimeout(0)`์œผ๋กœ ๋ Œ๋”๋ง ์‹œ๊ธฐ๋ฅผ ํŠœ๋‹ํ•จ. - **ํ˜„์ƒ**: ๋ถˆ๋Ÿฌ์˜จ ํŒŒ์ผ์˜ ์ผ๋ถ€ ๊ทธ๋ฃน ๋ผ๋ฒจ์ด ํ™”๋ฉด ์ถœ๋ ฅ๊ฐ’๊ณผ ์‚ฌ์ด๋“œ๋ฐ” ํ‘œ์‹œ๊ฐ’์ด ์„œ๋กœ ๋‹ค๋ฆ„ (์˜ˆ: Storage vs ๊ทธ๋ฃน). - **์›์ธ**: ๊ณผ๊ฑฐ ๋ฒ„์ „์˜ ์ €์žฅ ๋กœ์ง ์˜ค๋ฅ˜๋กœ ์ธํ•ด `attrs`์™€ `data` ํ•„๋“œ ๊ฐ„์˜ ๋ถˆ์ผ์น˜๊ฐ€ ํŒŒ์ผ ๋‚ด์— ๊ณ ์ฐฉํ™”๋จ. - **์กฐ์น˜**: `json_handler.js` ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, ๋กœ๋“œ ์‹œ `data.label`์„ ์›๋ณธ ์†Œ์Šค๋กœ ์‚ผ์•„ ์‹œ๊ฐ์  ๋ผ๋ฒจ์„ ๊ฐ•์ œ ๋™๊ธฐํ™”ํ•จ. ### [Instance #2235] - Destructive Object Disappearance (Style Corrupt) - **ํ˜„์ƒ**: ๋ ˆ์ด์–ด ์„ค์ • ๋ณ€๊ฒฝ ์‹œ ๊ฐ์ฒด๊ฐ€ ๊ฐ‘์ž๊ธฐ ํˆฌ๋ช…ํ•ด์ง€๊ฑฐ๋‚˜ ์ƒ‰์ƒ์ด ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ. - **์›์ธ**: `layers.js`์—์„œ ํˆฌ๋ช…๋„ ์ ์šฉ ์‹œ `setAttrs`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด์˜ ๋ชจ๋“  ์ปค์Šคํ…€ ์Šคํƒ€์ผ(fill, stroke ๋“ฑ)์„ ๋ฎ์–ด์จ๋ฒ„๋ฆผ. - **์กฐ์น˜**: `attr()` ๊ฐœ๋ณ„ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ธฐ์กด ์Šคํƒ€์ผ ์œ ์‚ฐ์„ ์™„๋ฒฝํžˆ ๋ณด์กดํ•จ. ### [Instance #2230] - Missing Coordinates Recovery (Pos/Size) - **ํ˜„์ƒ**: ์ผ๋ถ€ ๊ฐ์ฒด๊ฐ€ ์ขŒํ‘œ๊ฐ’ ๋ˆ„๋ฝ์œผ๋กœ ์ธํ•ด (0,0)์— ๋ฐฐ์น˜๋˜๊ฑฐ๋‚˜ ์•„์˜ˆ ๋ณด์ด์ง€ ์•Š์Œ. - **์›์ธ**: ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฐ ์—”์ง„ ์ „ํ™˜ ๊ณผ์ •์—์„œ X6 ํ‘œ์ค€ ์ขŒํ‘œ ํ•„๋“œ๊ฐ€ ์œ ์‹ค๋œ ๋ฐ์ดํ„ฐ ์ž”์žฌ. - **์กฐ์น˜**: `json_handler.js`์— `data.pos` ๊ธฐ๋ฐ˜ ์ขŒํ‘œ ์ž๋™ ๋ณต๊ตฌ ๋กœ์ง์„ ์ฃผ์ž…ํ•˜์—ฌ ์œ ์‹ค๋œ ๊ฐœ์ฒด๋“ค์„ ์ •์ƒ ์œ„์น˜๋กœ ์†Œํ™˜ํ•จ. ### [Instance #2225] - Edge Clipping & Selection Difficulty (Z-Index) - **ํ˜„์ƒ**: ๊ทธ๋ฃน ์œ„์— ์„ ์„ ๊ทธ์œผ๋ฉด ๊ทธ๋ฃน ๋’ค๋กœ ์ˆจ์–ด์„œ ํด๋ฆญ์ด ์•ˆ ๋จ. ๋‹จ์ถ•ํ‚ค ์—ฐ๊ฒฐ ์‹œ์—๋„ ๋™์ผ ํ˜„์ƒ ๋ฐ˜๋ณต. - **์›์ธ**: ์—ฃ์ง€ ๊ธฐ๋ณธ Z-Index๊ฐ€ 5๋กœ ์„ค์ •๋˜์–ด, ๋ ˆ์ด์–ด ์˜คํ”„์…‹์ด ์ ์šฉ๋œ ๊ทธ๋ฃน๋ณด๋‹ค ํ•˜๋‹จ์— ๋ฐฐ์น˜๋จ. - **์กฐ์น˜**: ์ „์ฒด ๊ณ„์ธต ๊ตฌ์กฐ ์žฌ์„ค๊ณ„ `Group(1~19) < Edge(30) < Node(50)` ๋ฐ ๋งˆ์šฐ์Šค/๋‹จ์ถ•ํ‚ค ์ƒ์„ฑ ๊ฒฝ๋กœ ๋™๊ธฐํ™”. ### [Instance #2220] - Accidental Reset of Edge Vertices - **ํ˜„์ƒ**: ์ƒˆ๋กœ์šด ์žฅ๋น„๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ๊ธฐ์กด์— ์˜ˆ์˜๊ฒŒ ๊บพ์–ด ๋†“์•˜๋˜ ์„ ๋“ค์ด ๋ชจ๋‘ ์ผ์ง์„ ์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ. - **์›์ธ**: `applyLayerFilters` ํ•จ์ˆ˜ ๋‚ด์— ๋ชจ๋“  ์—ฃ์ง€์˜ ๋ฒ„ํ…์Šค๋ฅผ ๊ฐ•์ œ๋กœ ๋น„์šฐ๋Š” ๊ณผ๋„ํ•œ '์ž๋™ ๋ณต๊ตฌ' ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ์žˆ์—ˆ์Œ. - **์กฐ์น˜**: ํ•ด๋‹น ํŒŒ๊ดด์ ์ธ ์ดˆ๊ธฐํ™” ๋กœ์ง(`setVertices([])`)์„ ์‚ญ์ œํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ปค์Šคํ…€ ๊ฒฝ๋กœ ๋ณด์กด. (Instance #1480 ์ •์ • ์‚ฌํ•ญ) --- ### [Instance #2202] - Label Reverts when Changing Label Position (Select Sync) - **ํ˜„์ƒ**: ๋ผ๋ฒจ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•œ ์งํ›„(์•„์ง ์ €์žฅ๋˜๊ธฐ ์ „) ๋ผ๋ฒจ ์œ„์น˜(`select`)๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ด๋ฆ„์ด ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ์•„๊ฐ. - **์›์ธ**: ๋ชจ๋“  ์ž…๋ ฅ ์š”์†Œ์— ๋™์ผํ•œ `debounce`(300ms)๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์–ด, ์ƒํ˜ธ์ž‘์šฉ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ฒฝํ•ฉ ๋ฐœ์ƒ ๋ฐ `renderProperties`์— ์˜ํ•œ DOM ๋ฎ์–ด์“ฐ๊ธฐ ํ˜„์ƒ. - **์กฐ์น˜**: `select`, `checkbox`, `color` ๋“ฑ ์ƒํƒœ ์„ ํƒํ˜• ์š”์†Œ๋Š” `change` ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ์ฆ‰์‹œ ์ €์žฅ(`applyChanges`)๋˜๋„๋ก ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ณด์žฅ. ### [Instance #2108] - Inconsistent Line Thickness (Style vs Selection) - **ํ˜„์ƒ**: ๊ตฌ์„ฑ๋„ ์ž‘์„ฑ ์‹œ ์„  ๋‘๊ป˜๊ฐ€ ์ผ์ •ํ•˜์ง€ ์•Š๊ฒŒ ๋ณด์ž„. - **์›์ธ**: 1. ์„ ํƒ ์‹œ ๊ฐ•์กฐ ํšจ๊ณผ(3px)์™€ ์ผ๋ฐ˜ ์ƒํƒœ(2px)์˜ ์ฐจ์ด. 2. '๊ตต์€ ์„ ' ์Šคํƒ€์ผ์ด UI์—๋Š” ์žˆ์œผ๋‚˜ ์‹ค์ œ ๋‘๊ป˜(4px) ๋ฐ˜์˜ ๋กœ์ง์ด ๋ˆ„๋ฝ๋จ. - **์กฐ์น˜**: 1. '๊ตต์€ ์„ (double)' ์„ ํƒ ์‹œ ์‹ค์ œ 4px๊ฐ€ ์ ์šฉ๋˜๋„๋ก ๋งคํ•‘ ๋กœ์ง ์—…๋ฐ์ดํŠธ. 2. ์†์„ฑ์ฐฝ์— '์„  ๋‘๊ป˜(Width)' ์ˆ˜์น˜ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐœ๋ณ„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ง€์›. ### [Instance #2010] - ID & Label Confusion (Initial Data Setup) - **ํ˜„์ƒ**: ๊ทธ๋ฃน์ด๋‚˜ ๋…ธ๋“œ ์ƒ์„ฑ ์‹œ ์ด๋ฆ„์ด `group_xxxx`์™€ ๊ฐ™์€ ID ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, ์ˆ˜์ • ํ›„ ํŠน์ • ์ƒํ™ฉ์—์„œ ๋‹ค์‹œ ID ๊ฐ’์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž„. - **์›์ธ**: `drop.js`์—์„œ ๋…ธ๋“œ ์ƒ์„ฑ ์‹œ ID์™€ Label์„ ๋™์ผํ•œ ๋žœ๋ค ๋ฌธ์ž์—ด๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ํ˜ผ๋™. - **์กฐ์น˜**: ์ดˆ๊ธฐ ๋ผ๋ฒจ์„ '๊ทธ๋ฃน', '์‚ฌ๊ฐํ˜•' ๋“ฑ ์นœ์ˆ™ํ•œ ํ•œ๊ธ€ ๋ช…์นญ(๋‹ค๊ตญ์–ด ๋Œ€์‘)์œผ๋กœ ์„ค์ •ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๊ณ , ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ID๋ฅผ ์ฝ๊ธฐ ์ „์šฉ ํ•„๋“œ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ„๋ฆฌ ๋…ธ์ถœํ•จ. ### [Instance #1968] - Data Reverted During Move after Rename (Blur vs Drag) - **ํ˜„์ƒ**: ๊ทธ๋ฃน ์ด๋ฆ„์„ ์ˆ˜์ •ํ•œ ์งํ›„ ๋‹ค๋ฅธ ๊ณณ์„ ํด๋ฆญํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ์ด๋™ํ•˜๋ฉด ์ด๋ฆ„์ด ์ด์ „ ๊ฐ’์œผ๋กœ ๋˜๋Œ์•„๊ฐ. - **์›์ธ**: ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ `change`(ํฌ์ปค์Šค ํ•ด์ œ) ์‹œ์ ์— ์ €์žฅํ•˜๋Š”๋ฐ, ๋“œ๋ž˜๊ทธ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฆฌ๋ Œ๋”๋ง ์ด๋ฒคํŠธ๊ฐ€ `change`๋ณด๋‹ค ๋จผ์ € ๋ฐœ์ƒํ•˜์—ฌ ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ด. - **์กฐ์น˜**: ์‚ฌ์ด๋“œ๋ฐ” ํ…์ŠคํŠธ ์ž…๋ ฅ ์ด๋ฒคํŠธ๋ฅผ `input`์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  300ms ๋””๋ฐ”์šด์‹ฑ์„ ์ ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™” ๊ตฌํ˜„. ### [Instance #1940] - JSON Syntax Error in Locale File (Stray Backticks) - **ํ˜„์ƒ**: ์•ฑ ๊ตฌ๋™ ์‹œ `[drawNET:CRITICAL] Failed to load locales` ์—๋Ÿฌ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ชจ๋“  ํ…์ŠคํŠธ๊ฐ€ ํ‚ค๊ฐ’์œผ๋กœ ํ‘œ์‹œ๋จ. - **์›์ธ**: `ko.json` ์ˆ˜์ • ๊ณผ์ •์—์„œ AI ๋„๊ตฌ๊ฐ€ ํŒŒ์ผ ๋์— ๋งˆํฌ๋‹ค์šด ๊ธฐํ˜ธ(```)๋ฅผ ์ž˜๋ชป ์‚ฝ์ž…ํ•˜์—ฌ ์œ ํšจํ•˜์ง€ ์•Š์€ JSON ํ˜•์‹์ด ๋จ. - **์กฐ์น˜**: `ko.json` ํŒŒ์ผ ๋์˜ ๋ถˆํ•„์š”ํ•œ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ตฌ์กฐ ์ •์ƒํ™”. ### [Instance #1931] - Property Handler Syntax Error (Accidental Deletion) - **ํ˜„์ƒ**: ๋…ธ๋“œ ์†์„ฑ ์ˆ˜์ • ์‹œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฝ˜์†”์— `SyntaxError` ๋ฐœ์ƒ. - **์›์ธ**: '์—์…‹ ๊ฒฝ๋กœ' ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์—์„œ `handlers/node.js` ์†์„ฑ ์ถ”์ถœ ๊ฐ์ฒด์˜ ๊ด„ํ˜ธ ๋ฐ ์ธ์ ‘ ํ•„๋“œ(color, fill ๋“ฑ)๋ฅผ ์‹ค์ˆ˜๋กœ ๋Œ€๋Ÿ‰ ์‚ญ์ œํ•จ. - **์กฐ์น˜**: ์‚ญ์ œ๋œ ๋ชจ๋“  ํ•„๋“œ ๋กœ์ง์„ ์›๋ž˜๋Œ€๋กœ ๋ณต๊ตฌํ•˜๊ณ  ์˜๋„ํ–ˆ๋˜ `assetPath` ์ถ”์ถœ๋ถ€๋งŒ ์ •๊ตํ•˜๊ฒŒ ์ œ๊ฑฐ. ### [Instance #1860] - Rich Card Sidebar UI Inconsistency - **ํ˜„์ƒ**: ๋ฆฌ์น˜ ํ…์ŠคํŠธ ์นด๋“œ์˜ ์†์„ฑ์ฐฝ ๋””์ž์ธ์ด ๊ธฐ์กด '์ปดํŒฉํŠธ UI' ํ‘œ์ค€(ํ† ๊ธ€ ์Šค์œ„์น˜, ์ •๋ ฌ๋œ ์ž…๋ ฅ์ฐฝ ๋“ฑ)๊ณผ ๋‹ค๋ฅด๊ฒŒ ํˆฌ๋ฐ•ํ•˜๊ฒŒ ํ‘œ์‹œ๋˜๊ณ  ์ •๋ณด ๋ฐ€๋„๊ฐ€ ๋‚ฎ์Œ. - **์›์ธ**: ์‹ ๊ทœ ๊ฐ์ฒด ์ „์šฉ ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ ์‹œ ํ‘œ์ค€ CSS ํด๋ž˜์Šค(`prop-input`, `toggle-switch`) ์ ์šฉ ๋ˆ„๋ฝ ๋ฐ ์ผ๋ถ€ ์Šคํƒ€์ผ(`input-with-color`) ๋ฏธ์ •์˜. - **์กฐ์น˜**: `rich_card.js` ํ…œํ”Œ๋ฆฟ์„ ํ‘œ์ค€ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ๋กœ ์ „๋ฉด ์žฌ์ž‘์„ฑํ•˜๊ณ , `properties_sidebar.css`์— ๋ถ€์กฑํ•œ ๋ ˆ์ด์•„์›ƒ ์Šคํƒ€์ผ ๋ณด๊ฐ•. ### [Instance #1840] - Rich Card Syntax Error (Duplicate Identifier) - **ํ˜„์ƒ**: ๋ฆฌ์น˜ ์นด๋“œ ์„ ํƒ ์‹œ ์ฝ˜์†”์— `Uncaught SyntaxError: Identifier 'renderRichContent' has already been declared` ๋ฐœ์ƒ ๋ฐ ์‚ฌ์ด๋“œ๋ฐ” ์ž‘๋™ ์ค‘๋‹จ. - **์›์ธ**: `styles/utils.js`์—์„œ ํ•จ์ˆ˜๋ฅผ ์ž„ํฌํŠธํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋กœ์ปฌ ํ•ธ๋“ค๋Ÿฌ ํŒŒ์ผ์—๋„ ๋™์ผํ•œ ๊ฐ€๋ช… ํ•จ์ˆ˜๊ฐ€ ๋‚จ์•„์žˆ์–ด ์ถฉ๋Œ ๋ฐœ์ƒ. - **์กฐ์น˜**: `handlers/rich_card.js` ํ•˜๋‹จ์˜ ์ค‘๋ณต๋œ `renderRichContent` ํ•จ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ณต์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •. ### [Instance #1692] - ๋‹ค์ค‘ ์„ ํƒ ํ•ด์ œ ์‹œ ์‹œ๊ฐ์  ์ž”์ƒ(Focus) ์œ ์ง€ - **ํ˜„์ƒ**: `Ctrl+Click`์œผ๋กœ ๋‹ค์ค‘ ์„ ํƒ ๊ฐ์ฒด ์ค‘ ์ผ๋ถ€๋ฅผ ํ•ด์ œํ•ด๋„ ์บ”๋ฒ„์Šค์ƒ์— ์ ์„  ํ…Œ๋‘๋ฆฌ(Focus)๊ฐ€ ๋‚จ์•„ ์žˆ์Œ. - **์›์ธ**: X6์˜ `Selection` ๋˜๋Š” `Transform` ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ถ”๊ฐ€ํ•œ `boundary` ๋„๊ตฌ๊ฐ€ `unselected` ์ด๋ฒคํŠธ ์‹œ ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ปค์Šคํ…€ ๋„๊ตฌ ๊ด€๋ฆฌ์— ๋ฐ€๋ ค ์ž”๋ฅ˜ํ•จ. - **์กฐ์น˜**: `selection.js`์˜ `unselected` ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ๋…ธ๋“œ/์—ฃ์ง€ ํ•ด์ œ ์‹œ `removeTools()`๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ๊ฐ•ํ™”. ### [Instance #1684] - `removeLabel` ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ - **ํ˜„์ƒ**: ์—ฃ์ง€ ์„ ํƒ ํ•ด์ œ ์‹œ `cell.removeLabel is not a function` ์—๋Ÿฌ ๋ฐœ์ƒ. - **์›์ธ**: ์ผ๋ถ€ X6 ํ™˜๊ฒฝ์—์„œ ์—ฃ์ง€ ๊ฐ์ฒด์˜ ๋‹จ์ถ• ํ•จ์ˆ˜๊ฐ€ ์œ ์‹ค๋˜๊ฑฐ๋‚˜ ์ฐจ๋‹จ๋˜๋Š” ๋ฌธ์ œ. - **์กฐ์น˜**: `setLabels`์™€ `filter`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ํ•ด๋‹น ID์˜ ๋ผ๋ฒจ์„ ์ œ์™ธํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์žฌ์„ค์ •ํ•จ. ### [Instance #1640] - ํ•˜์ด๋ผ์ดํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜์กด์„ฑ ์—๋Ÿฌ - **ํ˜„์ƒ**: ์‹œ์ž‘/๋Œ€์ƒ ์•ต์ปค ํ˜ธ๋ฒ„ ์‹œ `createExecutionContext` ๋ฐ `unhighlight` ํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” TypeError ๋ฐœ์ƒ. - **์›์ธ**: AntV X6์˜ Highlight ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜์กด์„ฑ ๋ฌธ์ œ. - **์กฐ์น˜**: ์™ธ๋ถ€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , ๋…ธ๋“œ์˜ ๋ณธ์ฒด(`body`) ์†์„ฑ(`attr`)์„ ์ง์ ‘ ์ œ์–ดํ•˜์—ฌ ๊ฐ•์กฐ ํšจ๊ณผ๋ฅผ ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋กœ์ง ์„ ํšŒ. ### [Instance #1628] - `addLabel` ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ - **ํ˜„์ƒ**: ์—ฃ์ง€์— ๋ผ๋ฒจ ์ถ”๊ฐ€ ์‹œ `cell.addLabel is not a function` ์—๋Ÿฌ ๋ฐœ์ƒ. - **์›์ธ**: X6 ํŠน์ • ๋ฒ„์ „์—์„œ ์—ฃ์ง€ ๊ฐ์ฒด์˜ ๋ฏน์Šค์ธ(Mixin) ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹จ์ถ• ํ•จ์ˆ˜๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ. - **์กฐ์น˜**: `getLabels()` / `setLabels()` ํŒจํ„ด์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ˜ธํ™˜์„ฑ ํ™•๋ณด. ### [Instance #1505] - ์ง์„  ๋ผ์šฐํŒ… ๊ฐ•์ œ ๊บพ์ž„ ํ˜„์ƒ - **ํ˜„์ƒ**: ๋ผ์šฐํ„ฐ๋ฅผ ์ œ๊ฑฐํ–ˆ์Œ์—๋„ ์„ ์ด 90๋„๋กœ ๊บพ์—ฌ ์—ฐ๊ฒฐ๋จ. - **์›์ธ**: X6์˜ ๋ฐฉํ–ฅ์„ฑ ์•ต์ปค(`top`, `left` ๋“ฑ)๊ฐ€ ๊ฒฝ๋กœ์— ์˜ํ–ฅ์„ ๋ฏธ์นจ. - **์กฐ์น˜**: '์ง์„ ' ๋ชจ๋“œ์ผ ๊ฒฝ์šฐ ์•ต์ปค๋ฅผ ๋ฐฉํ–ฅ์„ฑ์ด ์—†๋Š” `center`๋กœ ๊ฐ•์ œ ์ „ํ™˜. ### [Instance #1480] - ๋ ˆ์ด์–ด ํ•„ํ„ฐ๋ง ์‹œ ๋ผ์šฐํŒ… ์„ค์ • ์œ ์‹ค (์ •์ •๋จ) - **ํ˜„์ƒ**: ๋ ˆ์ด์–ด๋‚˜ ์คŒ ๋ณ€๊ฒฝ ์‹œ ๋‹ค์‹œ ๊บพ์ธ ์ƒํƒœ๋กœ ํšŒ๊ท€ํ•จ. - **์›์ธ**: ๋ ˆ์ด์–ด 'Auto-Repair' ๋กœ์ง์ด Vertices๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์Œ. - **์กฐ์น˜**: (๊ตฌ) `setVertices([])` ์ถ”๊ฐ€ -> (ํ˜„) ํ•ด๋‹น ๋กœ์ง์ด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ํŒŒ๊ดด๋ฅผ ์œ ๋ฐœํ•˜์—ฌ ์ตœ์ข… ์‚ญ์ œ ์™„๋ฃŒ (Instance #2220 ์ฐธ์กฐ). ### [Instance #1466] - Logger ์ฐธ์กฐ ์—๋Ÿฌ - **ํ˜„์ƒ**: `logger is not defined` ๋ฐœ์ƒ. - **์›์ธ**: `edge.js` ๋‚ด ๋ชจ๋“ˆ ์ž„ํฌํŠธ ๋ˆ„๋ฝ. - **์กฐ์น˜**: `logger` ๋ชจ๋“ˆ ์ž„ํฌํŠธ ์ถ”๊ฐ€. --- *์•„์นด์ด๋ธŒ ๊ด€๋ฆฌ์ž: drawNET AI Assistant*