Tighten issue gates and loop validation criteria

This commit is contained in:
2026-04-02 08:59:58 +09:00
parent 5b219461f3
commit e81be7e9ef
10 changed files with 368 additions and 224 deletions

File diff suppressed because one or more lines are too long

View File

@@ -156,94 +156,77 @@
<div style="width:100%; height:91px; background:linear-gradient(135deg, #1e293b 0%, #0f172a 100%); border-radius:8px; padding:20px 28px; color:#ffffff; box-sizing:border-box;">
<div style="font-size:13px; font-weight:700; margin-bottom:8px; color:#93c5fd;">DX와 BIM의 혼용 문제</div>
<div style="font-size:12px; line-height:1.4;">
<div style="padding-left:15px; text-indent:-15px; margin-bottom:3px;"><span style="color:#60a5fa;"></span>건설산업의 디지털 전환 논의에서 DX(Digital Transformation)와 BIM(Building Information Modeling)이 개념적으로 명확히 정립되지 않은채 혼용되어 사용되고 있음</div>
<div style="padding-left:15px; text-indent:-15px;"><span style="color:#60a5fa;"></span>건설산업의 DX를 올바르게 이해하기 위해 각 용어의 정의, 역할, 상호관계에 대한 체계적 정립 필요</div>
<div style="padding-left:15px; text-indent:-15px; margin-bottom:3px;">건설산업의 디지털 전환 논의에서 DX(Digital Transformation)와 BIM(Building Information Modeling)이 개념적으로 명확히 정립되지 않은채 혼용되어 사용되고 있음</div>
<div style="padding-left:15px; text-indent:-15px; margin-bottom:3px;">• 이로인해 BIM기술의 도입을 DX의 완성으로 오인하거나, DX를 BIM 기술 도입 수준으로 한정하는 인식 확산</div>
<div style="padding-left:15px; text-indent:-15px;">• 건설산업의 DX를 올바르게 이해하기 위해 각 용어의 정의, 역할, 상호관계에 대한 체계적 정립 필요</div>
</div>
</div>
<div style="height:12px;"></div>
<div style="width: 100%; max-height: 371px; font-size: 12px; line-height: 1.75; padding: 20px; box-sizing: border-box;">
<!-- DX의 정의와 위치 -->
<!-- DX의 정의와 위치 섹션 -->
<div style="margin-bottom: 25px;">
<h2 style="font-size: 14px; font-weight: bold; margin-bottom: 15px; color: #2563eb; border-bottom: 2px solid #2563eb; padding-bottom: 5px;">DX의 정의와 위치</h2>
<h2 style="font-size: 14px; font-weight: bold; color: #2563eb; margin-bottom: 15px; border-bottom: 2px solid #2563eb; padding-bottom: 5px;">DX의 정의와 위치</h2>
<div style="margin-bottom: 15px;">
<h3 style="font-size: 12px; font-weight: bold; margin-bottom: 8px;">용어 정의</h3>
<div style="background: #f8fafc; padding: 15px; border-radius: 8px; margin-bottom: 20px;">
<h3 style="font-size: 13px; font-weight: bold; margin-bottom: 10px;">용어 정의</h3>
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
<strong>건설산업</strong>
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
• 다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 8px;">
• 목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함
<div style="margin-bottom: 12px;">
<div style="font-weight: bold; margin-bottom: 5px;">건설산업</div>
<div style="padding-left:15px; text-indent:-15px;">• 다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업</div>
<div style="padding-left:15px; text-indent:-15px;">• 목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함</div>
</div>
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
<strong>BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</strong>
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
• 건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 8px; font-size: 11px; color: #666;">
출처: 건설산업 BIM 기본지침, 국토교통부, 2020
<div style="margin-bottom: 12px;">
<div style="font-weight: bold; margin-bottom: 5px;">BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</div>
<div style="padding-left:15px; text-indent:-15px;">• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
<div style="padding-left:15px; text-indent:-15px;">• 건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
<div style="font-size: 11px; color: #666; margin-top: 5px;">출처: 건설산업 BIM 기본지침, 국토교통부, 2020</div>
</div>
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
<strong>DX(Digital Transformation) : 산업 패러다임의 변화</strong>
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
• 디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
• 단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 8px; font-size: 11px; color: #666;">
출처: Digital Transformation, IBM Institute for Business Value, 2011 / What is Digital Transformation?, Agile Elephant, 2015
<div style="margin-bottom: 12px;">
<div style="font-weight: bold; margin-bottom: 5px;">DX(Digital Transformation) : 산업 패러다임의 변화</div>
<div style="padding-left:15px; text-indent:-15px;">• 디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
<div style="padding-left:15px; text-indent:-15px;">• 단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함</div>
<div style="font-size: 11px; color: #666; margin-top: 5px;">출처: Digital Transformation, IBM Institute for Business Value, 2011 / What is Digital Transformation?, Agile Elephant, 2015</div>
</div>
</div>
</div>
<!-- BIM과 핵심기술의 관계 -->
<!-- BIM과 핵심기술의 관계 섹션 -->
<div style="margin-bottom: 25px;">
<h2 style="font-size: 14px; font-weight: bold; margin-bottom: 15px; color: #059669; border-bottom: 2px solid #059669; padding-bottom: 5px;">BIM과 핵심기술의 관계</h2>
<h2 style="font-size: 14px; font-weight: bold; color: #16a34a; margin-bottom: 15px; border-bottom: 2px solid #16a34a; padding-bottom: 5px;">BIM과 핵심기술의 관계</h2>
<div style="margin-bottom: 15px;">
<h3 style="font-size: 12px; font-weight: bold; margin-bottom: 8px;">용어간 상호관계</h3>
<div style="background: #f0fdf4; padding: 15px; border-radius: 8px;">
<h3 style="font-size: 13px; font-weight: bold; margin-bottom: 10px;">용어간 상호관계</h3>
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
• DX는 BIM과 같은 디지털기술을 기반으로 산업 전반의 프로세스를 혁신하는 상위개념
</div>
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
• 건설산업의 DX는 GIS(공간정보), BIM, 디지털 트윈(가상환경)의 기술융합을 통해서만 실현 또는 구현 가능
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
• GIS의 역할 : 지리적 데이터를 공간 분석하여 시각적으로 표현, 위치기반 정보 제공
</div>
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 8px;">
• BIM의 역할 : 형상정보와 내용정보가 포함된 3D모델로, 건설 정보 기반의 Process와 Product를 제공
</div>
<div style="padding-left:15px; text-indent:-15px; margin-bottom: 8px;">• DX는 BIM과 같은 디지털기술을 기반으로 산업 전반의 프로세스를 혁신하는 상위개념</div>
<div style="text-align: center; margin: 15px 0; padding: 10px; background: #f8f9fa; border-radius: 8px;">
[이미지: DX와 핵심기술간 상호관계, 경로: /assets/images/DX1.png]<br>
<span style="font-size: 11px; color: #666;">출처: [그림 1] DX와 핵심기술간 상호관계</span>
<div style="padding-left:15px; text-indent:-15px; margin-bottom: 8px;">• 건설산업의 DX는 GIS(공간정보), BIM, 디지털 트윈(가상환경)의 기술융합을 통해서만 실현 또는 구현 가능</div>
<div style="padding-left:30px; text-indent:-15px; margin-bottom: 5px;">• GIS의 역할 : 지리적 데이터를 공간 분석하여 시각적으로 표현, 위치기반 정보 제공</div>
<div style="padding-left:30px; text-indent:-15px; margin-bottom: 10px;">• BIM의 역할 : 형상정보와 내용정보가 포함된 3D모델로, 건설 정보 기반의 Process와 Product를 제공</div>
<div style="text-align: center; margin: 15px 0;">
<div style="background: #fff; border: 2px solid #16a34a; padding: 10px; border-radius: 8px; display: inline-block;">
[이미지: DX와 핵심기술간 상호관계, 경로: /assets/images/DX1.png]
</div>
<div style="font-size: 11px; color: #666; margin-top: 5px;">출처: [그림 1] DX와 핵심기술간 상호관계</div>
</div>
<div style="margin-top: 15px;">
<strong>[DX와 BIM의 구분]</strong> <a href="#" style="color: #2563eb; text-decoration: underline;">[상세보기]</a>
<div style="font-weight: bold; margin-bottom: 8px;">[DX와 BIM의 구분]</div>
<div style="text-align: center;">
<a href="#" style="color: #2563eb; text-decoration: underline; font-size: 12px;">[상세보기]</a>
</div>
</div>
</div>
</div>
<!-- 핵심 메시지 -->
<div class="key-msg" style="margin-top: 20px; padding: 15px; background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%); border-left: 4px solid #0284c7; border-radius: 8px;">
<div style="font-size: 14px; font-weight: bold; color: #0284c7; text-align: center;">
건설산업에서 DX는 상위 개념이고 BIM은 그 디지털 전환을 가능하게 하는 핵심 기술 중 하나다.
</div>
<div style="background: linear-gradient(135deg, #3b82f6, #1d4ed8); color: white; padding: 15px; border-radius: 8px; text-align: center; margin-top: 20px;">
<div style="font-size: 14px; font-weight: bold; line-height: 1.5;">건설산업에서 DX는 상위 개념이고 BIM은 그 디지털 전환을 가능하게 하는 핵심 기술 중 하나다.</div>
</div>
</div>
@@ -251,28 +234,42 @@
</div>
<div class="area-sidebar" style="overflow:hidden;">
<div style="width:380px; height:474px; overflow:hidden; padding:16px; background:#ffffff; font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
<div style="font-size:10px; color:#64748b; margin-bottom:12px; text-align:left;">용어 정의</div>
<div style="width:380px; height:474px; background:#ffffff; border-radius:8px; box-shadow:0 2px 8px rgba(0,0,0,0.06); padding:20px; box-sizing:border-box; font-family:Arial,sans-serif;">
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px; margin-bottom:10px;">
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">건설산업</div>
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업</div>
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함</div>
<!-- 건설산업 카드 -->
<div style="background:#ffffff; border-radius:8px; box-shadow:0 2px 8px rgba(0,0,0,0.06); margin-bottom:12px; padding:16px;">
<div style="font-size:12px; font-weight:700; text-decoration:underline; text-underline-offset:3px; margin-bottom:8px; color:#000;">건설산업</div>
<div style="width:100%; height:1px; background:#000; margin-bottom:8px;"></div>
<div style="font-size:11px; line-height:1.6; color:#000;">
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px;">• 다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업</div>
<div style="padding-left:14px; text-indent:-14px;">• 목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함</div>
</div>
</div>
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px; margin-bottom:10px;">
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</div>
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:9px; color:#64748b; line-height:1.6;">출처: 건설산업 BIM 기본지침, 국토교통부, 2020</div>
<!-- BIM 카드 -->
<div style="background:#ffffff; border-radius:8px; box-shadow:0 2px 8px rgba(0,0,0,0.06); margin-bottom:12px; padding:16px;">
<div style="font-size:12px; font-weight:700; text-decoration:underline; text-underline-offset:3px; margin-bottom:2px; color:#000;">BIM(Building Information Modeling)</div>
<div style="font-size:11px; color:#666; margin-bottom:8px;">디지털 전환을 위한 핵심 기술</div>
<div style="width:100%; height:1px; background:#000; margin-bottom:8px;"></div>
<div style="font-size:11px; line-height:1.6; color:#000;">
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px;">• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
<div style="padding-left:14px; text-indent:-14px;">• 건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
</div>
<div style="font-size:11px; color:#94a3b8; font-style:italic; margin-top:8px; border-top:1px solid #e2e8f0; padding-top:6px;">출처: 건설산업 BIM 기본지침, 국토교통부, 2020</div>
</div>
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px;">
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">DX(Digital Transformation) : 산업 패러다임의 변화</div>
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함</div>
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:9px; color:#64748b; line-height:1.6;">출처: Digital Transformation, IBM Institute for Business Value, 2011 / What is Digital Transformation?, Agile Elephant, 2015</div>
<!-- DX 카드 -->
<div style="background:#ffffff; border-radius:8px; box-shadow:0 2px 8px rgba(0,0,0,0.06); padding:16px;">
<div style="font-size:12px; font-weight:700; text-decoration:underline; text-underline-offset:3px; margin-bottom:2px; color:#000;">DX(Digital Transformation)</div>
<div style="font-size:11px; color:#666; margin-bottom:8px;">산업 패러다임의 변화</div>
<div style="width:100%; height:1px; background:#000; margin-bottom:8px;"></div>
<div style="font-size:11px; line-height:1.6; color:#000;">
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px;">• 디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
<div style="padding-left:14px; text-indent:-14px;">• 단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함</div>
</div>
<div style="font-size:11px; color:#94a3b8; font-style:italic; margin-top:8px; border-top:1px solid #e2e8f0; padding-top:6px;">출처: Digital Transformation, IBM Institute for Business Value, 2011 / What is Digital Transformation?, Agile Elephant, 2015</div>
</div>
</div>
<div class="comparison-summary-card" style="margin-top:10px; background:#eff6ff; border:1px solid #bfdbfe; border-radius:8px; padding:12px;">
<div style="font-size:11px; font-weight:700; color:#1e3a8a; margin-bottom:6px;">DX와 BIM 핵심 비교</div>
@@ -284,8 +281,8 @@
</div>
<div class="area-footer" style="overflow:hidden;">
<div style="background: linear-gradient(135deg, #006aff 0%, #00aaff 100%); border-radius: 8px; padding: 16px 30px; text-align: center; color: #ffffff; width: 100%; height: 60px; display: flex; align-items: center; justify-content: center; box-sizing: border-box;">
<div style="font-size: 14px; font-weight: 700; line-height: 1.5;">BIM은 건설산업의 디지털전환(DX)을 수행하는 과정에서 가장 기초가 되는 일부분</div>
<div style="background: linear-gradient(135deg, #006aff 0%, #00aaff 100%); border-radius: 8px; padding: 16px 30px; text-align: center; color: #ffffff; width: 100%; height: 60px; display: flex; flex-direction: column; justify-content: center; box-sizing: border-box;">
<div style="font-size: 14px; font-weight: 700; line-height: 1.5;">BIM은 건설산업의 디지털전환(DX)을 수행하는 과정에서 가장 기초가 되는 일부분</div>
</div>
</div>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -11,9 +11,9 @@
"block_count": 0,
"blocks": [],
"clientHeight": 475,
"excess_px": 408,
"excess_px": 510,
"overflowed": true,
"scrollHeight": 883
"scrollHeight": 985
},
"footer": {
"block_count": 0,
@@ -27,9 +27,9 @@
"block_count": 0,
"blocks": [],
"clientHeight": 475,
"excess_px": 122,
"excess_px": 145,
"overflowed": true,
"scrollHeight": 597
"scrollHeight": 620
}
}
}

View File

@@ -7,8 +7,14 @@
## Validation Summary
- 실행 경로 검증: 통과
- 렌더링/측정 검증: 통과
- 최종 품질 판정: 통과
- 렌더링/측정 검증: 실패
- 최종 품질 판정: 재작업 필요
## Render Gates
- slide overflow: False
- body: overflowed=True excess_px=510 block_count=0
- sidebar: overflowed=True excess_px=145 block_count=0
- footer: overflowed=False excess_px=0 block_count=0
## Measurement
```json
@@ -25,9 +31,9 @@
"block_count": 0,
"blocks": [],
"clientHeight": 475,
"excess_px": 408,
"excess_px": 510,
"overflowed": true,
"scrollHeight": 883
"scrollHeight": 985
},
"footer": {
"block_count": 0,
@@ -41,19 +47,21 @@
"block_count": 0,
"blocks": [],
"clientHeight": 475,
"excess_px": 122,
"excess_px": 145,
"overflowed": true,
"scrollHeight": 597
"scrollHeight": 620
}
}
}
```
## Final Decision
- 판정: `pass`
- 판정: `revise`
## Failure Classification
- 없음
- Verify-CoreMessage
- Verify-RenderZone
## Next Action
1. 없음
1. overflow가 발생한 zone(body, sidebar)의 content budget, block 수, typography를 재조정한다.
2. 핵심 메시지 `DX는 상위 개념`, `BIM은 핵심 기술`을 가시 텍스트에 직접 노출한다.

View File

@@ -13,6 +13,8 @@
KPI / 판정 결과
- 판정: pass
- iteration: 1
- 종료 코드: 0
- 필수 산출물 4종 유효 여부: True
실패 분류
- 없음
@@ -23,3 +25,4 @@ KPI / 판정 결과
다음 단계 전달물
- 최신 실행 산출물
- 최신 measurement
- 최신 context

View File

@@ -1,7 +1,8 @@
실행 요약
- iteration 1 기준으로 최종 산출물과 측정 결과를 다시 검증했다.
- 이미지 캡션 보존과 비교 핵심 4축의 가시 보존 여부를 확인했다.
- 최종 판정은 `pass`이다.
- slide overflow: False
- zone overflow: body, sidebar
- 최종 판정은 `revise`이다.
산출물 경로
- `docs/run-001/06-validation/validation-result.md`
@@ -9,12 +10,13 @@
- `docs/run-001/05-execution/measurement.json`
KPI / 판정 결과
- 판정: pass
- 실패 분류: 없음
- 판정: revise
- 실패 분류: Verify-CoreMessage, Verify-RenderZone
수정 액션
- 없음
- overflow가 발생한 zone(body, sidebar)의 content budget, block 수, typography를 재조정한다.
- 핵심 메시지 `DX는 상위 개념`, `BIM은 핵심 기술`을 가시 텍스트에 직접 노출한다.
다음 단계 전달물
- 최신 validation 기록
- 다음 iteration 여부: 중단
- 다음 iteration 여부: 재실행

View File

@@ -1,61 +1,76 @@
목적
- 계획에 따라 실제 실행을 수행하고 산출물을 저장한다.
- 계획된 stage를 실제 실행하고, 검증에 필요한 실행 패키지를 완전하게 남긴다.
입력
- Step 4 결과 경로:
- 실행에 사용할 코드/스크립트:
실행 방법
1. 계획된 stage를 순서대로 수행한다.
2. stage별 산출물을 저장한다.
3. 경고와 재시도 이력을 남긴다.
4. 최종 결과물 경로를 연결한다.
5. 저장 누락과 실행 중단 여부를 점검한다.
1. Step 4에서 확정한 실행 계획과 입력 산출물을 사용해 실제 실행을 수행한다.
2. 아래 `필수 산출 항목`을 모두 생성하거나 기록한다.
3. 실행 종료 코드, 예외 유무, 산출물 파일 존재 여부를 확인한다.
4. `measurement.json``context.json`이 다음 단계에서 재검증 가능할 정도로 완전한지 확인한다.
5. `판정 규칙`에 따라 pass / revise / fail을 결정한다.
6. 실패 시 `실패 분류``수정 액션`을 함께 기록한다.
필수 산출 항목
- E1. 실제 실행 경로 기록
- E2. 산출물 파일 1개 이상 생성
- E3. 중간 또는 최종 결과 경로 기록
- E4. 경고 사항 기록
- E5. 재시도 이력 기록 (없으면 없음으로 표기)
- E1. 실행 명령 또는 실행 스크립트 1개
- E2. 입력 파일 경로 1개
- E3. `final.html` 생성
- E4. `generated_html.json` 생성
- E5. `measurement.json` 생성
- E6. `context.json` 생성
- E7. 경고/재시도/예외 기록 1개 이상 (`없음` 포함)
- E8. Step 6으로 넘길 핵심 리스크 또는 확인 포인트 1개 이상 (`없음` 포함)
성공 기준
- E1~E5 전부 작성됨
- 산출물 파일이 실제로 존재
- 실행 경로가 추적 가능함
- 경고/재시도 이력이 남
- E1~E8 전부 작성됨
- `final.html`, `generated_html.json`, `measurement.json`, `context.json` 파일이 모두 실제로 존재하고 0 byte가 아님
- 실행 종료 코드가 0임
- 처리되지 않은 예외(unhandled exception)가 없
- `measurement.json`에 최소 `slide`, `zones.body`, `zones.sidebar`, `zones.footer`가 존재함
- 다음 단계에서 재검증 가능한 실행 추적 정보가 남아 있음
실패 기준
- 실행 중단
- 산출물 미생성
- 실행 경로 미기록
- 경고/재시도 이력 미기록
- 실행 종료 코드가 0이 아님
- 필수 산출물 4종 중 1개 이상 미생성 또는 0 byte
- `measurement.json` 파싱 실패 또는 필수 키 누락
- `context.json` 누락으로 재검증 불가
- 실행 명령/스크립트 또는 입력 경로가 기록되지 않음
- 예외가 발생했는데 기록이 없음
KPI / 판정 규칙
- 충족률 = 충족 항목 수 / 5
- pass: 충족률 100% and 치명 항목(E1, E2, E3) 모두 충족
- revise: 충족률 80% 이상 100% 미만 and 치명 항목 모두 충족
- fail: 충족률 80% 미만 or 치명 항목 1개 이상 누락
- 충족률 = 충족 항목 수 / 8
- 치명 항목 = E1, E2, E3, E4, E5, E6
- `pass`: 충족률 100% and 치명 항목 모두 충족 and 실행 종료 코드 0 and 필수 산출물 4종이 모두 유효함
- `revise`: 충족률 87.5% 이상 100% 미만 and 치명 항목 모두 충족 and 실행은 완료되었으나 경고/재시도/리스크 기록 보강이 필요함
- `fail`: 충족률 87.5% 미만 or 치명 항목 1개 이상 누락 or 실행 종료 코드 비정상 or 필수 산출물 4종 중 1개 이상 무효
실패 분류
- Exec-Run: 실행 중단
- Exec-Artifact: 산출물 생성 실패
- Exec-Trace: 실행 경로 추적 불가
- Exec-Warn: 경고/재시도 기록 누락
- Exec-Tool: 도구/스크립트 문제
- `Exec-Exit`: 실행 종료 코드 비정상
- `Exec-Artifact`: 산출물 파일 생성 실패 또는 0 byte
- `Exec-Measurement`: `measurement.json` 누락/파싱 실패/필수 키 누락
- `Exec-Context`: `context.json` 누락 또는 재검증 정보 부족
- `Exec-Trace`: 실행 명령, 입력, 경고 이력 추적 불가
- `Exec-Tool`: 도구/스크립트 자체 오류
수정 액션 가이드
- Exec-Run: 중단 지점 재확인 후 해당 stage 재실행
- Exec-Artifact: 산출물 경로와 저장 로직 점검 재생성
- Exec-Trace: 사용한 스크립트/명령/입력을 다시 기록
- Exec-Warn: 경고와 재시도 이력을 보강
- Exec-Tool: 도구 오류 분리 후 수정
- `Exec-Exit`: 실패한 stage와 stderr를 확인하고 해당 stage부터 재실행
- `Exec-Artifact`: 산출물 저장 경로와 쓰기 로직 점검하고 파일 재생성
- `Exec-Measurement`: 렌더/측정 단계를 재실행하고 필수 키 존재 여부 재검사
- `Exec-Context`: 컨텍스트 저장 로직을 복구하고 입력/분석 정보 재저장
- `Exec-Trace`: 사용한 스크립트, 명령, 입력 경로, 경고 이력을 다시 기록
- `Exec-Tool`: 실행 스크립트 또는 코드 오류를 수정 후 재실행
실행 결과 기록
- 사용한 실행 경로:
- 생성된 산출물:
- 사용한 실행 명령 또는 스크립트:
- 입력 파일 경로:
- 생성된 산출물 경로:
- 실행 종료 코드:
- 경고:
- 재시도 이력:
- 예외:
- Step 6 전달 리스크/확인 포인트:
- 충족 항목 수:
- 충족률:
- 실패 분류:
@@ -65,4 +80,7 @@ KPI / 판정 규칙
- pass / revise / fail
다음 단계 전달물
- Step 6에서 사용할 실행 결과와 산출물 경로
- Step 6에서 사용할 `final.html`
- Step 6에서 사용할 `generated_html.json`
- Step 6에서 사용할 `measurement.json`
- Step 6에서 사용할 `context.json`

View File

@@ -1,76 +1,95 @@
목적
- 최종 결과가 목적과 제약에 맞는지 검증하고, 다음 run을 위한 개선 방향을 기록한다.
- 최종 결과가 목적과 제약에 맞는지 검증하고, 다음 반복에서 무엇을 되돌려 수정해야 하는지 명확하게 결정한다.
입력
- Step 5 결과 경로:
- 최종 산출물 경로:
실행 방법
1. 목적 적합성을 평가한다.
2. 내용 보존을 평가한다.
3. 렌더링/측정 결과를 평가한다.
4. 최종 판정을 적는다.
5. 다음 액션과 되돌림 지점을 기록한다.
6. 실패 원인을 분류한다.
1. 핵심 목적 문구가 결과물의 가시 텍스트에 실제로 남아 있는지 확인한다.
2. 원문에서 반드시 보존해야 하는 핵심 정보가 결과물의 가시 영역에 남아 있는지 확인한다.
3. `measurement.json` 기준으로 slide와 각 zone의 overflow를 확인한다.
4. 실패가 있으면 실패 분류와 되돌림 지점을 기록한다.
5. `판정 규칙`에 따라 pass / revise / fail을 결정한다.
6. 다음 반복에서 바로 사용할 수정 액션을 우선순위 순서로 적는다.
필수 산출 항목
- F1. 목적 적합성 평가
- F2. 내용 보존 평가
- F3. 렌더링/측정 평가
- F4. 최종 판정 1개
- F5. 실패 원인 분류 1개 이상 (실패 시)
- F6. 다음 액션 1개 이상
- F7. 되돌림 지점 명시
필수 검증 항목
- F1. 핵심 목적 적합성 평가 1개
- F2. 핵심 메시지 가시성 평가 1개
- F3. 이미지/도해 참조 보존 평가 1개
- F4. 비교 핵심 정보 보존 평가 1개
- F5. 렌더링/측정 평가 1개
- F6. 최종 판정 1개
- F7. 실패 원인 분류 1개 이상 (`pass`가 아니면 필수)
- F8. 수정 액션 1개 이상
- F9. 되돌림 지점 1개 명시
성공 기준
- F1~F7 전부 작성됨
- 최종 판정이 명확
- 실패 시 실패 원인과 수정 방향이 분명
- 다음 run으로 넘길 개선 사항이 존재함
- F1~F9 전부 작성됨
- 핵심 메시지(`DX는 상위 개념`, `BIM은 핵심 기술`)가 결과물의 가시 텍스트에 존재
- 이미지/도해 참조 문구(`DX와 핵심기술간 상호관계`)가 가시 텍스트에 존재
- 비교 핵심 4축(`범위`, `프로세스`, `성과품`, `확장성`)이 숨김 팝업이 아니라 가시 텍스트 또는 가시 요약 블록으로 존재함
- `measurement.json`에서 `slide.overflowed = false`
- `measurement.json`에서 `zones.body.overflowed = false`, `zones.sidebar.overflowed = false`, `zones.footer.overflowed = false`
- 검증 실패 시 어느 step으로 되돌릴지 명확히 지정됨
실패 기준
- 평가 항목 누락
- 최종 판정 누락
- 실패 원인 분류 누락
- 다음 액션 없음
- 되돌림 지점 없음
- 핵심 메시지 가시 텍스트 누락
- 이미지/도해 참조 문구 누락
- 비교 핵심 4축 중 1개 이상 누락 또는 숨김 상태만 존재
- slide overflow 발생
- body/sidebar/footer zone 중 1개 이상 overflow 발생
- 실패 분류 누락
- 수정 액션 누락
- 되돌림 지점 누락
- 검증 결과 파일 또는 측정 결과를 해석할 수 없음
KPI / 판정 규칙
- 충족률 = 충족 항목 수 / 7
- pass: 충족률 100% and 치명 항목(F1, F2, F3, F4) 모두 충족
- revise: 충족률 86% 이상 100% 미만 and 치명 항목 모두 충족
- fail: 충족률 86% 미만 or 치명 항목 1개 이상 누락
- 충족률 = 충족 항목 수 / 9
- 치명 항목 = F2, F3, F4, F5, F6, F9
- `pass`: 충족률 100% and 치명 항목 모두 충족 and slide/zone overflow 0건 and 핵심 메시지/이미지 참조/비교 4축이 모두 가시 텍스트에 존재
- `revise`: 검증 결과를 해석할 수 있고 치명적 시스템 오류는 없으나, 품질 게이트(F2~F5) 중 1개 이상 미충족
- `fail`: 검증 자체가 불가능함 or 치명 항목 1개 이상 기록 불가 or 측정/결과 파일 누락으로 판정 불가
실패 분류
- Verify-Purpose: 목적 적합성 불충분
- Verify-Preserve: 내용 보존 실패
- Verify-Render: 렌더/측정 실패
- Verify-Judgement: 최종 판정 불명확
- Verify-Action: 다음 액션 부족
- Verify-Rollback: 되돌림 지점 미정
- `Verify-Purpose`: 중심 메시지와 결과물 목적이 어긋남
- `Verify-CoreMessage`: 핵심 메시지 가시 텍스트 누락
- `Verify-ImageRef`: 이미지/도해 참조 문구 누락
- `Verify-ComparisonVisible`: 비교 핵심 4축이 가시 영역에 없음
- `Verify-RenderSlide`: slide overflow 발생
- `Verify-RenderZone`: body/sidebar/footer zone overflow 발생
- `Verify-Trace`: 검증 파일/측정 파일 해석 불가
- `Verify-Action`: 수정 액션 부족
- `Verify-Rollback`: 되돌림 지점 미정
수정 액션 가이드
- Verify-Purpose: 중심 메시지와 결과물의 일치 여부 재검토
- Verify-Preserve: 누락/과잉 생성/왜곡 항목 보강
- Verify-Render: overflow 또는 배치 문제 수정
- Verify-Judgement: pass/revise/fail 판정 근거를 다시 명시
- Verify-Action: 다음 run 개선 항목을 최소 1개 이상 추가
- Verify-Rollback: 어느 step으로 되돌릴지 명시
- `Verify-Purpose`: 중심 메시지 문장을 본문 또는 footer의 가시 텍스트에 다시 배치
- `Verify-CoreMessage`: `DX는 상위 개념`, `BIM은 핵심 기술` 문구를 더 직접적으로 노출
- `Verify-ImageRef`: 이미지 캡션 또는 이미지 참조 문구를 숨김 영역이 아닌 가시 블록으로 이동
- `Verify-ComparisonVisible`: 비교 핵심 4축을 화면에 바로 보이는 bullet/card/table 요약으로 강제
- `Verify-RenderSlide`: 전체 slide budget 또는 레이아웃 구조 재조정
- `Verify-RenderZone`: overflow가 난 zone의 content budget, block 수, typography를 재조정
- `Verify-Trace`: validation/measurement 산출물 저장 및 파싱 로직 복구
- `Verify-Action`: 다음 반복에서 수행할 수정 항목을 최소 1개 이상 보강
- `Verify-Rollback`: Stage 1B, Stage 2, Stage 3 중 되돌릴 지점을 지정
실행 결과 기록
- 목적 적합성:
- 내용 보존:
- 핵심 메시지 가시성:
- 이미지/도해 참조 보존:
- 비교 핵심 정보 보존:
- 렌더링/측정:
- 최종 판정:
- 실패 원인 분류:
- 다음 액션:
- 수정 액션:
- 되돌림 지점:
- 충족 항목 수:
- 충족률:
- 수정 액션:
판정
- pass / revise / fail
다음 단계 전달물
- 다음 run 시작 전에 참고할 검증 결과와 개선 사항
- 다음 반복 시작 전에 참고할 실패 분류 목록
- 다음 반복 시작 전에 적용할 수정 액션 목록
- 되돌릴 stage 또는 step

View File

@@ -22,6 +22,9 @@ from src.renderer import render_slide_from_html # type: ignore
from src.slide_measurer import measure_rendered_heights # type: ignore
COMPARISON_MARKER = "comparison-summary-card"
COMPARE_KEYS = ["범위", "프로세스", "성과품", "확장성"]
CORE_MESSAGE_KEYS = ["DX는 상위 개념", "BIM은 핵심 기술"]
IMAGE_REFERENCE_KEY = "DX와 핵심기술간 상호관계"
def read_json(path: Path) -> dict:
@@ -67,39 +70,63 @@ def rerender_final_html(generated: dict, context: dict) -> str:
return render_slide_from_html(generated, analysis_dict, preset)
def zone_overflow_names(measurement: dict) -> list[str]:
zones = measurement.get("zones", {})
names: list[str] = []
for name in ("body", "sidebar", "footer"):
if zones.get(name, {}).get("overflowed"):
names.append(name)
return names
def validate_outputs(generated: dict, measurement: dict) -> tuple[str, list[str], list[str]]:
visible = "\n".join([
generated.get("body_html", ""),
generated.get("sidebar_html", ""),
generated.get("footer_html", ""),
])
text = strip_tags(visible)
body_html = generated.get("body_html", "")
sidebar_html = generated.get("sidebar_html", "")
footer_html = generated.get("footer_html", "")
text = strip_tags("\n".join([body_html, sidebar_html, footer_html]))
failures: list[str] = []
actions: list[str] = []
if measurement.get("slide", {}).get("overflowed"):
failures.append("Verify-Render")
actions.append("overflow가 발생한 영역의 budget 또는 HTML 구조를 조정한다.")
slide_overflow = measurement.get("slide", {}).get("overflowed")
zone_overflows = zone_overflow_names(measurement)
if "DX와 핵심기술간 상호관계" not in text:
failures.append("Verify-Preserve")
actions.append("이미지 캡션 또는 이미지 참조 문구를 본문 가시 텍스트로 남긴다.")
if slide_overflow:
failures.append("Verify-RenderSlide")
actions.append("slide 전체 overflow를 해소하도록 layout budget 또는 전체 레이아웃 구조를 조정한다.")
compare_keys = ["범위", "프로세스", "성과품", "확장성"]
if not all(k in text for k in compare_keys):
failures.append("Verify-Preserve")
actions.append("비교 핵심 4축을 숨김 팝업이 아니라 보이는 요약 블록으로 유지한다.")
if zone_overflows:
failures.append("Verify-RenderZone")
actions.append(f"overflow가 발생한 zone({', '.join(zone_overflows)})의 content budget, block 수, typography를 재조정한다.")
if "DX는 상위 개념" not in text and "상위 개념" not in text:
failures.append("Verify-Purpose")
actions.append("핵심 메시지 문장을 더 선명하게 본문 또는 footer에 유지한다.")
if not all(key in text for key in CORE_MESSAGE_KEYS):
failures.append("Verify-CoreMessage")
actions.append("핵심 메시지 `DX는 상위 개념`, `BIM은 핵심 기술`을 가시 텍스트에 직접 노출한다.")
status = "pass" if not failures else "revise"
return status, sorted(set(failures)), actions
if IMAGE_REFERENCE_KEY not in text:
failures.append("Verify-ImageRef")
actions.append("이미지/도해 참조 문구 `DX와 핵심기술간 상호관계`를 숨김 영역이 아닌 가시 블록으로 유지한다.")
comparison_visible = COMPARISON_MARKER in sidebar_html and all(key in text for key in COMPARE_KEYS)
if not comparison_visible:
failures.append("Verify-ComparisonVisible")
actions.append("비교 핵심 4축(범위, 프로세스, 성과품, 확장성)을 화면에 바로 보이는 요약 블록으로 강제한다.")
if failures:
return "revise", sorted(set(failures)), list(dict.fromkeys(actions))
return "pass", [], []
def build_validation_markdown(run_id: str, status: str, failures: list[str], actions: list[str], measurement: dict) -> str:
slide_overflow = measurement.get("slide", {}).get("overflowed", True)
zones = measurement.get("zones", {})
zone_lines = []
for name in ("body", "sidebar", "footer"):
zone = zones.get(name, {})
zone_lines.append(
f"- {name}: overflowed={zone.get('overflowed')} excess_px={zone.get('excess_px')} block_count={zone.get('block_count')}"
)
render_ok = (not slide_overflow) and (not zone_overflow_names(measurement))
status_line = "통과" if status == "pass" else "재작업 필요"
failure_lines = "\n".join(f"- {f}" for f in failures) if failures else "- 없음"
action_lines = "\n".join(f"{i + 1}. {a}" for i, a in enumerate(actions)) if actions else "1. 없음"
@@ -112,9 +139,13 @@ def build_validation_markdown(run_id: str, status: str, failures: list[str], act
## Validation Summary
- 실행 경로 검증: 통과
- 렌더링/측정 검증: {'통과' if not measurement.get('slide', {}).get('overflowed') else '실패'}
- 렌더링/측정 검증: {'통과' if render_ok else '실패'}
- 최종 품질 판정: {status_line}
## Render Gates
- slide overflow: {slide_overflow}
{chr(10).join(zone_lines)}
## Measurement
```json
{json.dumps(measurement, ensure_ascii=False, indent=2)}
@@ -176,19 +207,79 @@ def main() -> None:
for iteration in range(1, args.max_iterations + 1):
cmd = [
sys.executable,
str(repo_root / 'scripts' / 'run_from_artifacts.py'),
str(repo_root / "scripts" / "run_from_artifacts.py"),
"--input", str(input_file),
"--stage1a", str(stage1a),
"--stage1b", str(stage1b),
"--output-dir", str(output_dir),
]
subprocess.run(cmd, cwd=str(DESIGN_AGENT_ROOT), check=True)
completed = subprocess.run(cmd, cwd=str(DESIGN_AGENT_ROOT), capture_output=True, text=True)
generated_path = output_dir / "generated_html.json"
context_path = output_dir / "context.json"
final_html_path = output_dir / "final.html"
measurement_path = output_dir / "measurement.json"
if completed.returncode != 0:
status = "fail"
failures = ["Exec-Exit"]
actions = ["실패한 stage와 stderr를 확인하고 해당 stage부터 재실행한다."]
validation_path.write_text(
build_validation_markdown(args.run_id, "revise", ["Exec-Exit"], actions, {"slide": {"overflowed": True}, "zones": {}}),
encoding="utf-8",
)
step5_body = f"""실행 요약
- auto_loop_runner.py iteration {iteration} 실행이 비정상 종료되었다.
- 입력: `docs/{args.run_id}/01-input/{input_file.name}`
- 종료 코드: {completed.returncode}
실행 stderr
```text
{completed.stderr.strip()}
```
산출물 경로
- `docs/{args.run_id}/05-execution/`
KPI / 판정 결과
- 판정: fail
- iteration: {iteration}
- 종료 코드: {completed.returncode}
실패 분류
- Exec-Exit
수정 액션
- 실패한 stage와 stderr를 확인하고 해당 stage부터 재실행
다음 단계 전달물
- 실행 stderr
- 실패 시점 정보
"""
step6_body = f"""실행 요약
- iteration {iteration}에서 실행 자체가 실패하여 품질 검증을 완료할 수 없었다.
산출물 경로
- `docs/{args.run_id}/06-validation/validation-result.md`
KPI / 판정 결과
- 판정: fail
- 실패 분류: Exec-Exit
수정 액션
- 실패한 stage와 stderr를 확인하고 해당 stage부터 재실행
다음 단계 전달물
- 실행 stderr
- 실패 시점 정보
- 다음 iteration 여부: 재실행
"""
write_step_comment(step_comment_bodies[5], step5_body)
write_step_comment(step_comment_bodies[6], step6_body)
post_comment_if_configured(args.repo_slug, issue_numbers[4], step_comment_bodies[5])
post_comment_if_configured(args.repo_slug, issue_numbers[5], step_comment_bodies[6])
continue
generated = read_json(generated_path)
context = read_json(context_path)
changed = inject_visible_comparison_summary(generated)
@@ -204,6 +295,11 @@ def main() -> None:
status, failures, actions = validate_outputs(generated, measurement)
validation_path.write_text(build_validation_markdown(args.run_id, status, failures, actions, measurement), encoding="utf-8")
zone_names = zone_overflow_names(measurement)
critical_outputs_ok = all(path.exists() and path.stat().st_size > 0 for path in [final_html_path, generated_path, measurement_path, context_path])
step5_status = "pass" if completed.returncode == 0 and critical_outputs_ok else "fail"
step5_failures = "없음" if step5_status == "pass" else "Exec-Artifact"
step5_actions = "- 없음" if step5_status == "pass" else "- 필수 산출물 4종과 저장 경로를 재확인하고 재생성"
step5_body = f"""실행 요약
- auto_loop_runner.py iteration {iteration}로 실행했다.
- 입력: `docs/{args.run_id}/01-input/{input_file.name}`
@@ -217,22 +313,26 @@ def main() -> None:
- `docs/{args.run_id}/05-execution/context.json`
KPI / 판정 결과
- 판정: pass
- 판정: {step5_status}
- iteration: {iteration}
- 종료 코드: {completed.returncode}
- 필수 산출물 4종 유효 여부: {critical_outputs_ok}
실패 분류
- 없음
- {step5_failures}
수정 액션
- 없음
{step5_actions}
다음 단계 전달물
- 최신 실행 산출물
- 최신 measurement
- 최신 context
"""
step6_body = f"""실행 요약
- iteration {iteration} 기준으로 최종 산출물과 측정 결과를 다시 검증했다.
- 이미지 캡션 보존과 비교 핵심 4축의 가시 보존 여부를 확인했다.
- slide overflow: {measurement.get('slide', {}).get('overflowed')}
- zone overflow: {', '.join(zone_names) if zone_names else '없음'}
- 최종 판정은 `{status}`이다.
산출물 경로
@@ -267,6 +367,3 @@ KPI / 판정 결과
if __name__ == "__main__":
main()