Files
HMDesign/docs/sw/sw-dotum-font-qa/integrated-improvement/integrated-improvement-result.json
T
shkim4 6504668e85 docs(sw): Dotum default font, Footer design check and real viewer consumer QA
Report docs/sw/sw-dotum-font-2026-10-20.md and evidence docs/sw/sw-dotum-font-qa/: Noto -> Dotum layout diff of 40 SW
Stories x 4 widths, Header hysteresis trace, Footer design items (4 PASS), SW regression runs with baseline failure
classification, and the isolated HMDesignSwTest-viewer run (Chrome 34/34, Firefox 15/15; original project untouched).
Open items: synthesized-bold overflow in fixed Header cells and Footer POLYGON / WIPEOUT labels (design review),
viewer-regression not run, macOS / Linux fallback not verified.
2026-10-20 16:59:55 +09:00

1219 lines
27 KiB
JSON

{
"browser": "155.0.8059.80",
"checks": [
{
"name": "menu (default): no Open next to the logo",
"status": "PASS"
},
{
"name": "menu (default): dropdown footer keeps + New and Open",
"status": "PASS"
},
{
"name": "header: Open takes the file name place right of the logo (same junction offset, 48px)",
"status": "PASS",
"data": {
"home": {
"x": 360,
"y": 851.5,
"w": 80,
"h": 48,
"right": 440
},
"openBox": {
"x": 425,
"y": 851.5,
"w": 61.375,
"h": 48,
"right": 486.375
},
"junction": -15
}
},
{
"name": "header: file name follows Open without overlap",
"status": "PASS",
"data": {
"openBox": {
"x": 425,
"y": 851.5,
"w": 61.375,
"h": 48,
"right": 486.375
},
"docBox": {
"x": 488.375,
"y": 851.5,
"w": 246.625,
"h": 48,
"right": 735
}
}
},
{
"name": "header: Open uses hm-sw-header__document-button (same surface, color, weight as the file name)",
"status": "PASS",
"data": {
"styles": {
"cls": "hm-sw-header__document-button",
"bg": "linear-gradient(rgb(8, 24, 19) 0%, rgb(9",
"color": "rgb(240, 247, 245)",
"weight": "700",
"padL": "5px",
"borderL": "0px",
"borderR": "1px"
},
"fileStyles": {
"bg": "linear-gradient(rgb(8, 24, 19) 0%, rgb(9",
"color": "rgb(240, 247, 245)",
"weight": "700",
"padL": "12px"
}
}
},
{
"name": "D-1: file name after Open starts with 12px padding",
"status": "PASS",
"data": {
"bg": "linear-gradient(rgb(8, 24, 19) 0%, rgb(9",
"color": "rgb(240, 247, 245)",
"weight": "700",
"padL": "12px"
}
},
{
"name": "header: Open hover turns only the text #FFC600",
"status": "PASS"
},
{
"name": "header: dropdown footer has + New only (no duplicate Open)",
"status": "PASS"
},
{
"name": "header: Open calls onDocumentOpen",
"status": "PASS"
},
{
"name": "documentOpenLabel is the Open text",
"status": "PASS"
},
{
"name": "responsive 1920: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 2280,
"barRight": 2280,
"overlap": false,
"open": 61.375,
"doc": 246.625,
"layer": 234,
"more": false
}
},
{
"name": "responsive 1920: Open shown next to the logo",
"status": "PASS",
"data": {
"open": 61.375,
"inMore": null
}
},
{
"name": "responsive 1920: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 1800: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 2160,
"barRight": 2160,
"overlap": false,
"open": 0,
"doc": 190,
"layer": 234,
"more": true
}
},
{
"name": "responsive 1800: Open moved into More and works there",
"status": "PASS",
"data": {
"open": 0,
"inMore": true
}
},
{
"name": "responsive 1800: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 1440: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 1800,
"barRight": 1800,
"overlap": false,
"open": 61.375,
"doc": 310,
"layer": 234,
"more": true
}
},
{
"name": "responsive 1440: Open shown next to the logo",
"status": "PASS",
"data": {
"open": 61.375,
"inMore": null
}
},
{
"name": "responsive 1440: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 1180: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 1540,
"barRight": 1540,
"overlap": false,
"open": 0,
"doc": 150,
"layer": 234,
"more": true
}
},
{
"name": "responsive 1180: Open moved into More and works there",
"status": "PASS",
"data": {
"open": 0,
"inMore": true
}
},
{
"name": "responsive 1180: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 1080: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 1440,
"barRight": 1440,
"overlap": false,
"open": 0,
"doc": 136,
"layer": 234,
"more": true
}
},
{
"name": "responsive 1080: Open moved into More and works there",
"status": "PASS",
"data": {
"open": 0,
"inMore": true
}
},
{
"name": "responsive 1080: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 900: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 1260,
"barRight": 1260,
"overlap": false,
"open": 0,
"doc": 175,
"layer": 234,
"more": true
}
},
{
"name": "responsive 900: Open moved into More and works there",
"status": "PASS",
"data": {
"open": 0,
"inMore": true
}
},
{
"name": "responsive 900: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 768: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 1128,
"barRight": 1128,
"overlap": false,
"open": 61.375,
"doc": 175.625,
"layer": 234,
"more": true
}
},
{
"name": "responsive 768: Open shown next to the logo",
"status": "PASS",
"data": {
"open": 61.375,
"inMore": null
}
},
{
"name": "responsive 768: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 640: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 1000,
"barRight": 1000,
"overlap": false,
"open": 0,
"doc": 111,
"layer": 234,
"more": true
}
},
{
"name": "responsive 640: Open moved into More and works there",
"status": "PASS",
"data": {
"open": 0,
"inMore": true
}
},
{
"name": "responsive 640: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 520: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 880,
"barRight": 880,
"overlap": false,
"open": 0,
"doc": 103,
"layer": 234,
"more": true
}
},
{
"name": "responsive 520: Open moved into More and works there",
"status": "PASS",
"data": {
"open": 0,
"inMore": true
}
},
{
"name": "responsive 520: layer field keeps its Figma width (234) while Open is shown",
"status": "PASS",
"data": 234
},
{
"name": "responsive 390: 49px, no overflow or overlap, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 750,
"barRight": 750,
"overlap": false,
"open": 0,
"doc": 96,
"layer": 113,
"more": true
}
},
{
"name": "responsive 390: Open moved into More and works there",
"status": "PASS",
"data": {
"open": 0,
"inMore": true
}
},
{
"name": "resize: collapsed Open returns once when the header grows (measured, with hysteresis)",
"status": "PASS",
"data": [
[
520,
0
],
[
560,
0
],
[
600,
1
],
[
640,
1
],
[
680,
1
],
[
720,
1
],
[
760,
1
],
[
820,
1
],
[
900,
1
],
[
1080,
1
]
]
},
{
"name": "hidden documentNew: footer keeps Open on its right side",
"status": "PASS",
"data": {
"footer": {
"x": 424,
"y": 442.5,
"w": 310,
"h": 40,
"right": 734
},
"action": {
"x": 672.875,
"y": 451,
"w": 53.125,
"h": 24,
"right": 726
}
}
},
{
"name": "hidden documentNew + documentOpen: no footer",
"status": "PASS"
},
{
"name": "hidden layerFreeze / layerLock: field draws the bulb only, two empty 20px places",
"status": "PASS",
"data": [
{
"empty": false,
"w": 20
},
{
"empty": true,
"w": 20
},
{
"empty": true,
"w": 20
}
]
},
{
"name": "hidden layerFreeze / layerLock: rows have no snowflake / lock button, places kept",
"status": "PASS",
"data": [
{
"buttons": [
"hm-sw-header__layer-toggle--visibility",
"hm-sw-header__layer-item"
],
"empty": 2,
"name": 931
},
{
"buttons": [
"hm-sw-header__layer-toggle--visibility",
"hm-sw-header__layer-item"
],
"empty": 2,
"name": 931
},
{
"buttons": [
"hm-sw-header__layer-toggle--visibility",
"hm-sw-header__layer-item"
],
"empty": 2,
"name": 931
}
]
},
{
"name": "hidden layer states: the bulb still reports its callback",
"status": "PASS"
},
{
"name": "composed: Open right of the logo at the same junction offset as SWHeader",
"status": "PASS",
"data": {
"cHome": {
"x": 360,
"y": 6118.5,
"w": 80,
"h": 48,
"right": 440
},
"cOpen": {
"x": 425,
"y": 6118.5,
"w": 61.375,
"h": 48,
"right": 486.375
}
}
},
{
"name": "composed: file name after Open has 12px padding",
"status": "PASS"
},
{
"name": "composed: Open callback",
"status": "PASS"
},
{
"name": "composed: showOpen={false} removes Open from the dropdown",
"status": "PASS"
},
{
"name": "composed responsive 1920: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 1800: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 1440: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 1180: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 1080: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 900: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 768: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 1,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 640: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 0,
"more": 1,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 640: 파일 열기 reachable in More",
"status": "PASS"
},
{
"name": "composed responsive 520: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 0,
"more": 1,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 520: 파일 열기 reachable in More",
"status": "PASS"
},
{
"name": "composed responsive 390: 49px, no overflow, nothing past the edge",
"status": "PASS",
"data": {
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 0,
"more": 1,
"clipped": false,
"right": 0
}
},
{
"name": "composed responsive 390: 파일 열기 reachable in More",
"status": "PASS"
},
{
"name": "popup: SWPopup frames match the property window frame (314, surface, border, radius, title)",
"status": "PASS",
"data": [
{
"w": 314,
"bg": "rgb(228, 219, 201)",
"border": "rgb(166, 125, 3)",
"radius": "4px",
"shadow": "rgb(0, 0, 0) 0px 0px 0px 1px inset",
"title": "rgb(255, 198, 0)",
"weight": "700",
"titlebar": 30,
"role": "dialog",
"modal": "false"
},
{
"w": 314,
"bg": "rgb(228, 219, 201)",
"border": "rgb(166, 125, 3)",
"radius": "4px",
"shadow": "rgb(0, 0, 0) 0px 0px 0px 1px inset",
"title": "rgb(255, 198, 0)",
"weight": "700",
"titlebar": 30,
"role": "dialog",
"modal": "false"
},
{
"w": 314,
"bg": "rgb(228, 219, 201)",
"border": "rgb(166, 125, 3)",
"radius": "4px",
"shadow": "rgb(0, 0, 0) 0px 0px 0px 1px inset",
"title": "rgb(255, 198, 0)",
"weight": "700",
"titlebar": 30,
"role": "dialog",
"modal": "false"
}
]
},
{
"name": "popup content: SWHeaderInput rows commit through the host callbacks",
"status": "PASS"
},
{
"name": "popup content: SWPopupRow is the property row (72px label, 32px row, 28px box)",
"status": "PASS",
"data": {
"label": "72px",
"minH": "32px",
"box": "28px"
}
},
{
"name": "popup content: HM UI Switch works inside",
"status": "PASS"
},
{
"name": "popup content: SWSelect (unit) works inside",
"status": "PASS"
},
{
"name": "popup content: HM UI Slider works inside",
"status": "PASS",
"data": "Callback: name=평면도-02 → scale=50 → snap=false → unit=cm → opacity=70"
},
{
"name": "popup content: HM UI Button works inside",
"status": "PASS"
},
{
"name": "popup dropdown: no SWHeader field dropdown inside the popups",
"status": "PASS"
},
{
"name": "popup dropdown: popup layer picker opens right under its field (fixed overlay, right edge) and is not clipped",
"status": "PASS",
"data": {
"fieldBox": {
"x": 473,
"y": 558.5,
"w": 200,
"h": 28,
"right": 673
},
"menuBox": {
"x": 439,
"y": 586.5,
"w": 234,
"h": 160,
"right": 673
},
"hit": true
}
},
{
"name": "popup dropdown: selection callback, list closes, popup stays",
"status": "PASS"
},
{
"name": "popup dropdown: popup color picker becomes a fixed overlay",
"status": "PASS"
},
{
"name": "popup dropdown: color chip callback",
"status": "PASS",
"data": "Callback: name=평면도-02 → scale=50 → snap=false → unit=cm → opacity=70 → apply → layer=dim → color=0,255,0"
},
{
"name": "popup dropdown: Escape closes the dropdown only",
"status": "PASS"
},
{
"name": "object popup: read-only rows",
"status": "PASS"
},
{
"name": "object popup: number row commits",
"status": "PASS"
},
{
"name": "object popup: compact row uses the 41px hug field",
"status": "PASS",
"data": {
"cls": "hm-sw-header__input hm-sw-property__compact",
"w": 28.5625
}
},
{
"name": "property panel + children: children follow the property groups in the same body",
"status": "PASS",
"data": [
"공통",
"메모"
]
},
{
"name": "property panel + children: child content callback",
"status": "PASS"
},
{
"name": "popup: close button calls onClose",
"status": "PASS"
},
{
"name": "short popup: dropdown extends past the popup and stays fully visible (no clipping)",
"status": "PASS",
"data": {
"bBox": {
"x": 706,
"y": 264.5,
"w": 314,
"h": 104,
"right": 1020
},
"menuB": {
"x": 769,
"y": 355.5,
"w": 234,
"h": 160,
"right": 1003
},
"bHit": true
}
},
{
"name": "several popups: Escape in a dropdown closes only the dropdown",
"status": "PASS"
},
{
"name": "several popups: Escape on an edited input cancels the edit only",
"status": "PASS"
},
{
"name": "several popups: Escape inside a popup closes that popup only",
"status": "PASS",
"data": "Callback: close(a)"
},
{
"name": "several popups: Escape outside closes only the top popup (last used: B)",
"status": "PASS",
"data": "Callback: close(a) → close(b)"
},
{
"name": "several popups: the popup used last becomes the top",
"status": "PASS",
"data": "Callback: close(a) → close(b) → close(a)"
},
{
"name": "long content: the body scrolls inside the frame and the last row is reachable",
"status": "PASS",
"data": {
"scroll": {
"sh": 1000,
"ch": 328,
"overflow": "auto"
},
"lastVisible": true
}
},
{
"name": "no browser console or page errors",
"status": "PASS",
"data": []
}
],
"errors": [],
"data": {
"junction": -15,
"responsive": [
{
"width": 1920,
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 2280,
"barRight": 2280,
"overlap": false,
"open": 61.375,
"doc": 246.625,
"layer": 234,
"more": false,
"inMore": null
},
{
"width": 1800,
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 2160,
"barRight": 2160,
"overlap": false,
"open": 0,
"doc": 190,
"layer": 234,
"more": true,
"inMore": true
},
{
"width": 1440,
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 1800,
"barRight": 1800,
"overlap": false,
"open": 61.375,
"doc": 310,
"layer": 234,
"more": true,
"inMore": null
},
{
"width": 1180,
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 1540,
"barRight": 1540,
"overlap": false,
"open": 0,
"doc": 150,
"layer": 234,
"more": true,
"inMore": true
},
{
"width": 1080,
"height": 49,
"barOverflow": 0,
"areaOverflow": 1,
"headerRight": 1440,
"barRight": 1440,
"overlap": false,
"open": 0,
"doc": 136,
"layer": 234,
"more": true,
"inMore": true
},
{
"width": 900,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 1260,
"barRight": 1260,
"overlap": false,
"open": 0,
"doc": 175,
"layer": 234,
"more": true,
"inMore": true
},
{
"width": 768,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 1128,
"barRight": 1128,
"overlap": false,
"open": 61.375,
"doc": 175.625,
"layer": 234,
"more": true,
"inMore": null
},
{
"width": 640,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 1000,
"barRight": 1000,
"overlap": false,
"open": 0,
"doc": 111,
"layer": 234,
"more": true,
"inMore": true
},
{
"width": 520,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 880,
"barRight": 880,
"overlap": false,
"open": 0,
"doc": 103,
"layer": 234,
"more": true,
"inMore": true
},
{
"width": 390,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"headerRight": 750,
"barRight": 750,
"overlap": false,
"open": 0,
"doc": 96,
"layer": 113,
"more": true,
"inMore": true
}
],
"hysteresis": [
[
520,
0
],
[
560,
0
],
[
600,
1
],
[
640,
1
],
[
680,
1
],
[
720,
1
],
[
760,
1
],
[
820,
1
],
[
900,
1
],
[
1080,
1
]
],
"composedResponsive": [
{
"width": 1920,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
},
{
"width": 1800,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
},
{
"width": 1440,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
},
{
"width": 1180,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
},
{
"width": 1080,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
},
{
"width": 900,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 0,
"clipped": false,
"right": 0
},
{
"width": 768,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 1,
"more": 1,
"clipped": false,
"right": 0
},
{
"width": 640,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 0,
"more": 1,
"clipped": false,
"right": 0
},
{
"width": 520,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 0,
"more": 1,
"clipped": false,
"right": 0
},
{
"width": 390,
"height": 49,
"barOverflow": 0,
"areaOverflow": 0,
"open": 0,
"more": 1,
"clipped": false,
"right": 0
}
],
"popupFrames": [
{
"w": 314,
"bg": "rgb(228, 219, 201)",
"border": "rgb(166, 125, 3)",
"radius": "4px",
"shadow": "rgb(0, 0, 0) 0px 0px 0px 1px inset",
"title": "rgb(255, 198, 0)",
"weight": "700",
"titlebar": 30,
"role": "dialog",
"modal": "false"
},
{
"w": 314,
"bg": "rgb(228, 219, 201)",
"border": "rgb(166, 125, 3)",
"radius": "4px",
"shadow": "rgb(0, 0, 0) 0px 0px 0px 1px inset",
"title": "rgb(255, 198, 0)",
"weight": "700",
"titlebar": 30,
"role": "dialog",
"modal": "false"
},
{
"w": 314,
"bg": "rgb(228, 219, 201)",
"border": "rgb(166, 125, 3)",
"radius": "4px",
"shadow": "rgb(0, 0, 0) 0px 0px 0px 1px inset",
"title": "rgb(255, 198, 0)",
"weight": "700",
"titlebar": 30,
"role": "dialog",
"modal": "false"
}
]
},
"status": "PASS"
}