Refine run-001 toward reference block layout

This commit is contained in:
2026-04-03 15:05:04 +09:00
parent 74197864ca
commit d80d62e2e7
22 changed files with 167 additions and 157 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 188 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -10,26 +10,26 @@
"body": {
"block_count": 0,
"blocks": [],
"clientHeight": 482,
"excess_px": 0,
"clientHeight": 477,
"excess_px": 2,
"overflowed": false,
"scrollHeight": 482
"scrollHeight": 479
},
"footer": {
"block_count": 0,
"blocks": [],
"clientHeight": 52,
"clientHeight": 58,
"excess_px": 0,
"overflowed": false,
"scrollHeight": 52
"scrollHeight": 58
},
"sidebar": {
"block_count": 0,
"blocks": [],
"clientHeight": 482,
"clientHeight": 477,
"excess_px": 0,
"overflowed": false,
"scrollHeight": 482
"scrollHeight": 477
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -16,7 +16,7 @@ GIS의 역할 : ...</td></tr>
</table>
<div style="font-size:13px;font-weight:700;margin-bottom:4px;">팝업</div>
<table style="border-collapse:collapse;font-size:12px;width:100%;max-width:600px;">
<tr style="background:#1e293b;color:white;"><th style="padding:8px;">title</th><th style="padding:8px;">분량</th></tr><tr><td style="padding:6px 8px;font-weight:700;">혼용 대표 사례</td><td style="padding:6px 8px;font-size:11px;">340</td></tr>
<tr><td style="padding:6px 8px;font-weight:700;">DX와 BIM의 구분</td><td style="padding:6px 8px;font-size:11px;">1135</td></tr>
<tr style="background:#1e293b;color:white;"><th style="padding:8px;">title</th><th style="padding:8px;">분량</th></tr><tr><td style="padding:6px 8px;font-weight:700;">혼용 대표 사례</td><td style="padding:6px 8px;font-size:11px;">241</td></tr>
<tr><td style="padding:6px 8px;font-weight:700;">DX와 BIM의 구분</td><td style="padding:6px 8px;font-size:11px;">1736</td></tr>
</table>
</body></html>

File diff suppressed because one or more lines are too long

View File

@@ -5,8 +5,8 @@
<div style="font-size:24px;font-weight:900;color:#16a34a;margin-bottom:12px;">품질 점수: 100</div>
<div style="font-size:12px;color:#555;margin-bottom:4px;">슬라이드: clientHeight=720px, scrollHeight=720px, overflow=False</div>
<table style="border-collapse:collapse;font-size:12px;width:100%;max-width:600px;margin-top:8px;">
<tr style="background:#1e293b;color:white;"><th style="padding:8px;">영역</th><th style="padding:8px;">clientH</th><th style="padding:8px;">scrollH</th><th style="padding:8px;">excess</th></tr><tr style="background:#f0fdf4;"><td style="padding:6px 8px;">✅ body</td><td style="padding:6px 8px;">482px</td><td style="padding:6px 8px;">482px</td><td style="padding:6px 8px;">+0px</td></tr>
<tr style="background:#f0fdf4;"><td style="padding:6px 8px;">✅ footer</td><td style="padding:6px 8px;">52px</td><td style="padding:6px 8px;">52px</td><td style="padding:6px 8px;">+0px</td></tr>
<tr style="background:#f0fdf4;"><td style="padding:6px 8px;">✅ sidebar</td><td style="padding:6px 8px;">482px</td><td style="padding:6px 8px;">482px</td><td style="padding:6px 8px;">+0px</td></tr>
<tr style="background:#1e293b;color:white;"><th style="padding:8px;">영역</th><th style="padding:8px;">clientH</th><th style="padding:8px;">scrollH</th><th style="padding:8px;">excess</th></tr><tr style="background:#f0fdf4;"><td style="padding:6px 8px;">✅ body</td><td style="padding:6px 8px;">477px</td><td style="padding:6px 8px;">479px</td><td style="padding:6px 8px;">+2px</td></tr>
<tr style="background:#f0fdf4;"><td style="padding:6px 8px;">✅ footer</td><td style="padding:6px 8px;">58px</td><td style="padding:6px 8px;">58px</td><td style="padding:6px 8px;">+0px</td></tr>
<tr style="background:#f0fdf4;"><td style="padding:6px 8px;">✅ sidebar</td><td style="padding:6px 8px;">477px</td><td style="padding:6px 8px;">477px</td><td style="padding:6px 8px;">+0px</td></tr>
</table>
</body></html>

View File

@@ -8,11 +8,11 @@
## Validation Summary
- 실행 경로 검증: 통과
- 렌더링/측정 검증: 통과
- 최종 품질 판정: 통과
- 최종 품질 판정: 재작업 필요
## Render Gates
- slide overflow: False
- body: overflowed=False excess_px=0 block_count=0
- body: overflowed=False excess_px=2 block_count=0
- sidebar: overflowed=False excess_px=0 block_count=0
- footer: overflowed=False excess_px=0 block_count=0
@@ -30,36 +30,38 @@
"body": {
"block_count": 0,
"blocks": [],
"clientHeight": 482,
"excess_px": 0,
"clientHeight": 477,
"excess_px": 2,
"overflowed": false,
"scrollHeight": 482
"scrollHeight": 479
},
"footer": {
"block_count": 0,
"blocks": [],
"clientHeight": 52,
"clientHeight": 58,
"excess_px": 0,
"overflowed": false,
"scrollHeight": 52
"scrollHeight": 58
},
"sidebar": {
"block_count": 0,
"blocks": [],
"clientHeight": 482,
"clientHeight": 477,
"excess_px": 0,
"overflowed": false,
"scrollHeight": 482
"scrollHeight": 477
}
}
}
```
## Final Decision
- 판정: `pass`
- 판정: `revise`
## Failure Classification
- 없음
- Verify-ComparisonVisible
- Verify-DesignStructure
## Next Action
1. 없음
1. 비교 핵심 4축(범위, 프로세스, 성과품, 확장성)을 화면에 바로 보이는 요약 블록으로 강제한다.
2. 핵심 관계를 설명하는 시각적 관계도 블록을 본문 중심 구조로 유지한다.

View File

@@ -2,7 +2,7 @@
- iteration 1 기준으로 최종 산출물과 측정 결과를 다시 검증했다.
- slide overflow: False
- zone overflow: 없음
- 최종 판정은 `pass`이다.
- 최종 판정은 `revise`이다.
산출물 경로
- `docs/run-001/06-validation/validation-result.md`
@@ -11,12 +11,13 @@
- `docs/run-001/05-execution/stage_2_verification.json`
KPI / 판정 결과
- 판정: pass
- 실패 분류: 없음
- 판정: revise
- 실패 분류: Verify-ComparisonVisible, Verify-DesignStructure
수정 액션
- 없음
- 비교 핵심 4축(범위, 프로세스, 성과품, 확장성)을 화면에 바로 보이는 요약 블록으로 강제한다.
- 핵심 관계를 설명하는 시각적 관계도 블록을 본문 중심 구조로 유지한다.
다음 단계 전달물
- 최신 validation 기록
- 다음 iteration 여부: 중단
- 다음 iteration 여부: 재실행

View File

@@ -504,12 +504,12 @@ def _build_stage2_retry_html(ctx: PipelineContext, retry_plan: dict) -> dict:
comparison_title = comparison_topic.title if comparison_topic and comparison_topic.title else 'Comparison'
problem_bullets = _problem_bullets_from_raw(raw)[:2]
evidence_bullets = _evidence_bullets_from_raw(raw)[:4]
evidence_bullets = _evidence_bullets_from_raw(raw)[:3]
definition_sections = _definition_sections_from_raw(raw)[:3]
relation_bullets = _relation_bullets_from_raw(raw)[:4]
comparison_rows = _parse_comparison_rows_from_raw(raw)
preferred_axes = ['\ubc94\uc704', '\ud504\ub85c\uc138\uc2a4', '\uc131\uacfc\ud488', '\ud655\uc7a5\uc131']
preferred_axes = ['범위', '프로세스', '성과품', '확장성']
picked_rows = [row for row in comparison_rows if row[0] in preferred_axes]
if len(picked_rows) < 4:
seen = {row[0] for row in picked_rows}
@@ -519,7 +519,7 @@ def _build_stage2_retry_html(ctx: PipelineContext, retry_plan: dict) -> dict:
seen.add(row[0])
if len(picked_rows) >= 4:
break
picked_rows = picked_rows[:4]
picked_rows = picked_rows[:3]
image_src = _extract_image_src_from_raw(raw)
if image_src and ctx.base_path:
@@ -531,89 +531,96 @@ def _build_stage2_retry_html(ctx: PipelineContext, retry_plan: dict) -> dict:
image_caption = _extract_caption_from_raw(raw)
conclusion_text = _conclusion_from_raw(raw)
intro_len = sum(len(x) for x in problem_bullets + evidence_bullets)
defs_len = sum(len(s['body']) for s in definition_sections)
relation_len = sum(len(x) for x in relation_bullets)
sidebar_width = '34%' if defs_len >= relation_len else '31%'
main_width = '66%' if defs_len >= relation_len else '69%'
relation_visual_height = '138px' if intro_len > 320 else '152px'
problem_items_html = ''.join(
f'<li style="margin-left:14px; margin-bottom:3px;">{_trim_visible_copy(item, floor=84, ceiling=180)}</li>'
f'<li style="margin-left:14px; margin-bottom:4px;">{_trim_visible_copy(item, floor=100, ceiling=220)}</li>'
for item in problem_bullets
)
evidence_items_html = ''.join(
f'<li style="margin-left:14px; margin-bottom:3px;">{_trim_visible_copy(item, floor=72, ceiling=150)}</li>'
f'<li style="margin-left:14px; margin-bottom:4px;">{_trim_visible_copy(item, floor=84, ceiling=180)}</li>'
for item in evidence_bullets
)
relation_items_html = ''.join(
f'<li style="margin-left:14px; margin-bottom:3px;">{_trim_visible_copy(item, floor=72, ceiling=150)}</li>'
f'<li style="margin-left:16px; margin-bottom:5px;">{_trim_visible_copy(item, floor=92, ceiling=210)}</li>'
for item in relation_bullets
)
definition_cards_html = ''
for section in definition_sections:
for idx, section in enumerate(definition_sections, start=1):
definition_cards_html += (
'<div style="background:#ffffff; border:1px solid #cbd5e1; border-radius:10px; padding:10px 12px;">'
f'<div style="font-size:11px; font-weight:800; color:#0f172a; margin-bottom:4px;">{section["title"]}</div>'
f'<div style="font-size:9px; line-height:1.55; color:#334155;">{_trim_visible_copy(section["body"], floor=120, ceiling=250)}</div>'
'<div style="background:#ffffff; border:1px solid #d7e2f0; border-radius:14px; padding:12px; display:flex; gap:10px; align-items:flex-start; min-height:96px;">'
f'<div style="width:34px; height:34px; border-radius:999px; background:#2563eb; color:#fff; font-size:15px; font-weight:800; display:flex; align-items:center; justify-content:center; flex-shrink:0;">{idx}</div>'
'<div style="flex:1;">'
f'<div style="font-size:13px; font-weight:800; color:#0f172a; margin-bottom:6px; line-height:1.35;">{section["title"]}</div>'
f'<div style="font-size:9.5px; line-height:1.55; color:#334155; word-break:keep-all;">{_trim_visible_copy(section["body"], floor=150, ceiling=330)}</div>'
'</div>'
'</div>'
)
comparison_rows_html = ''
for axis, dx, bim in picked_rows:
comparison_rows_html += (
'<div style="background:#ffffff; border:1px solid #bfdbfe; border-radius:10px; padding:8px 10px; display:flex; flex-direction:column; gap:4px; min-height:52px;">'
f'<div style="font-size:8px; font-weight:800; color:#1d4ed8;">{axis}</div>'
f'<div style="font-size:7.2px; line-height:1.32; color:#1e3a8a;"><span style="font-weight:700;">DX</span> {_trim_visible_copy(dx, floor=48, ceiling=92)}</div>'
f'<div style="font-size:7.2px; line-height:1.32; color:#334155;"><span style="font-weight:700;">BIM</span> {_trim_visible_copy(bim, floor=48, ceiling=92)}</div>'
'<div style="display:grid; grid-template-columns:1fr 86px 1fr; border-top:1px solid #dbe5f2; align-items:stretch;">'
f'<div style="padding:6px 9px; font-size:9.4px; line-height:1.35; color:#1e3a8a; font-weight:600; background:#ffffff;">{_trim_visible_copy(dx, floor=72, ceiling=145)}</div>'
f'<div style="padding:6px 6px; font-size:9.4px; line-height:1.25; color:#1d4ed8; font-weight:800; text-align:center; background:#eff6ff; border-left:1px solid #dbe5f2; border-right:1px solid #dbe5f2; display:flex; align-items:center; justify-content:center;">{axis}</div>'
f'<div style="padding:6px 9px; font-size:9.4px; line-height:1.35; color:#475569; text-align:right; background:#ffffff;">{_trim_visible_copy(bim, floor=72, ceiling=145)}</div>'
'</div>'
)
intro_html = (
'<div style="background:linear-gradient(135deg,#fff7ed 0%,#ffedd5 100%); border:1px solid #fdba74; border-radius:12px; padding:8px 10px; display:grid; grid-template-columns:1fr 1fr; gap:10px;">'
f'<div><div style="font-size:11px; font-weight:800; color:#c2410c; margin-bottom:4px;">{problem_title}</div><ul style="font-size:9px; line-height:1.45; color:#7c2d12; padding-left:0; margin:0; list-style:disc;">{problem_items_html}</ul></div>'
f'<div><div style="font-size:11px; font-weight:800; color:#9a3412; margin-bottom:4px;">{evidence_title}</div><ul style="font-size:8.5px; line-height:1.4; color:#7c2d12; padding-left:0; margin:0; list-style:disc;">{evidence_items_html}</ul></div>'
'<div style="background:linear-gradient(135deg,#fff5f5 0%,#ffe8e8 100%); border:2px solid #f8a4a4; border-radius:12px; padding:10px 14px;">'
'<div style="display:flex; gap:12px; align-items:flex-start;">'
'<div style="font-size:24px; line-height:1; color:#f59e0b; margin-top:2px;">&#9888;</div>'
'<div style="flex:1;">'
f'<div style="font-size:12px; font-weight:900; color:#b42318; margin-bottom:5px;">{problem_title}</div>'
f'<ul style="font-size:9px; line-height:1.45; color:#7a271a; padding-left:0; margin:0 0 4px 0; list-style:disc;">{problem_items_html}</ul>'
f'<div style="font-size:8.5px; line-height:1.38; color:#9a3412; margin-top:2px;"><span style="font-weight:800;">{evidence_title}</span></div>'
f'<ul style="font-size:8.5px; line-height:1.38; color:#9a3412; padding-left:0; margin:2px 0 0 0; list-style:disc;">{evidence_items_html}</ul>'
'<div style="margin-top:8px; background:#991b1b; color:#ffffff; border-radius:4px; padding:5px 10px; font-size:10px; font-weight:800; word-break:keep-all;">&#8594; 각 용어의 정의, 역할, 상호관계에 대한 체계적 정립 필요</div>'
'</div>'
'</div>'
'</div>'
)
relation_html = (
f'<div class="relation-diagram-card" style="background:#ffffff; border:1px solid #cbd5e1; border-radius:14px; padding:12px 14px; display:grid; grid-template-columns:250px 1fr; gap:10px;">'
'<div style="display:flex; flex-direction:column; gap:5px;">'
f'{_relation_visual(image_src, image_caption).replace("height:220px", f"height:{relation_visual_height}")}'
f'<div style="font-size:8px; line-height:1.3; color:#166534; background:#dcfce7; border:1px solid #86efac; border-radius:999px; padding:3px 8px; text-align:center;">{image_caption}</div>'
'<div style="background:#ffffff; border:1px solid #d6e2ef; border-radius:14px; padding:10px 12px;">'
f'<div style="font-size:14px; font-weight:900; color:#1f3b63; margin-bottom:6px;">{relation_title}</div>'
'<div style="display:grid; grid-template-columns:250px 1fr; gap:14px; align-items:start;">'
'<div>'
f'{_relation_visual(image_src, image_caption).replace("height:220px", "height:208px").replace("padding:10px", "padding:12px")}'
f'<div style="margin-top:8px; background:#dcfce7; border:1px solid #86efac; color:#166534; font-size:9px; line-height:1.3; border-radius:999px; padding:4px 10px; text-align:center;">{image_caption}</div>'
'</div>'
'<div style="display:flex; flex-direction:column; gap:8px;">'
f'<ul style="font-size:8.8px; line-height:1.42; color:#334155; padding-left:0; margin:0; list-style:disc;">{relation_items_html}</ul>'
'<div style="margin-top:4px; border:1px solid #b9d3ff; border-radius:10px; overflow:hidden;">'
'<div style="display:grid; grid-template-columns:1fr 86px 1fr; background:linear-gradient(135deg,#0d47a1,#1565c0); color:#fff; font-weight:800; font-size:12px; text-align:center;">'
'<div style="padding:7px 10px;">DX</div>'
'<div style="padding:7px 6px; background:rgba(0,0,0,0.14); font-size:11px;">\uad6c\ubd84</div>'
'<div style="padding:7px 10px;">BIM</div>'
'</div>'
f'{comparison_rows_html}'
'</div>'
'<div style="display:flex; flex-direction:column; gap:6px;">'
f'<div style="font-size:11px; font-weight:800; color:#1e40af;">{relation_title}</div>'
f'<ul style="font-size:8.5px; line-height:1.42; color:#334155; padding-left:0; margin:0; list-style:disc;">{relation_items_html}</ul>'
'</div>'
'</div>'
)
comparison_html = (
'<div class="comparison-summary-card" style="background:#eff6ff; border:1px solid #bfdbfe; border-radius:12px; padding:8px 10px;">'
f'<div style="font-size:11px; font-weight:800; color:#1d4ed8; margin-bottom:6px;">{comparison_title}</div>'
f'<div style="display:grid; grid-template-columns:1fr 1fr; gap:8px;">{comparison_rows_html}</div>'
'</div>'
)
body_html = (
'<div style="width:100%; height:100%; box-sizing:border-box; font-family:\'Segoe UI\',sans-serif; color:#0f172a; display:flex; flex-direction:column; gap:6px;">'
'<div style="width:100%; height:100%; box-sizing:border-box; font-family:Segoe UI,sans-serif; color:#0f172a; display:flex; flex-direction:column; gap:6px;">'
f'{intro_html}'
f'{relation_html}'
f'{comparison_html}'
'</div>'
)
sidebar_html = (
'<div style="width:100%; height:100%; box-sizing:border-box; font-family:\'Segoe UI\',sans-serif; display:flex; flex-direction:column; gap:8px;">'
f'<div style="background:#ffffff; border:1px solid #cbd5e1; border-radius:12px; padding:10px 12px;"><div style="font-size:12px; font-weight:800; color:#1e293b; margin-bottom:8px;">{definitions_title}</div><div style="display:flex; flex-direction:column; gap:8px;">{definition_cards_html}</div></div>'
'<div style="width:100%; height:100%; box-sizing:border-box; font-family:Segoe UI,sans-serif; display:flex; flex-direction:column; gap:10px;">'
f'<div style="font-size:12px; font-weight:800; color:#475569; padding:2px 6px;">{definitions_title}</div>'
f'{definition_cards_html}'
'</div>'
)
footer_html = (
'<div style="background:linear-gradient(135deg, #006aff 0%, #00aaff 100%); border-radius:10px; padding:10px 20px; text-align:center; color:#ffffff; width:100%; height:52px; display:flex; align-items:center; justify-content:center; box-sizing:border-box;">'
f'<div style="font-size:12px; font-weight:800; line-height:1.35;">{conclusion_text}</div>'
'<div style="background:linear-gradient(135deg, #0b6ef3 0%, #17a6f5 100%); border-radius:10px; padding:10px 20px; text-align:center; color:#ffffff; width:100%; height:58px; display:flex; align-items:center; justify-content:center; box-sizing:border-box;">'
f'<div style="font-size:13px; font-weight:900; line-height:1.35;">{conclusion_text}</div>'
'</div>'
)
@@ -621,7 +628,7 @@ def _build_stage2_retry_html(ctx: PipelineContext, retry_plan: dict) -> dict:
'body_html': body_html,
'sidebar_html': sidebar_html,
'footer_html': footer_html,
'reasoning': f"retry regrouping by content importance: intro(problem+evidence), body(relation+comparison), sidebar(definitions), widths {main_width}/{sidebar_width}",
'reasoning': 'retry regrouping by content importance: grouped problem+evidence, reference-like relation block, comparison embedded under relation, numbered definition cards',
}