Tighten issue gates and loop validation criteria
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -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="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:13px; font-weight:700; margin-bottom:8px; color:#93c5fd;">DX와 BIM의 혼용 문제</div>
|
||||||
<div style="font-size:12px; line-height:1.4;">
|
<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; margin-bottom:3px;">• 건설산업의 디지털 전환 논의에서 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;">• 이로인해 BIM기술의 도입을 DX의 완성으로 오인하거나, DX를 BIM 기술 도입 수준으로 한정하는 인식 확산</div>
|
||||||
|
<div style="padding-left:15px; text-indent:-15px;">• 건설산업의 DX를 올바르게 이해하기 위해 각 용어의 정의, 역할, 상호관계에 대한 체계적 정립 필요</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="height:12px;"></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;">
|
<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;">
|
<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;">
|
<div style="background: #f8fafc; padding: 15px; border-radius: 8px; margin-bottom: 20px;">
|
||||||
<h3 style="font-size: 12px; font-weight: bold; margin-bottom: 8px;">용어 정의</h3>
|
<h3 style="font-size: 13px; font-weight: bold; margin-bottom: 10px;">용어 정의</h3>
|
||||||
|
|
||||||
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
|
<div style="margin-bottom: 12px;">
|
||||||
• <strong>건설산업</strong>
|
<div style="font-weight: bold; margin-bottom: 5px;">• 건설산업</div>
|
||||||
</div>
|
<div style="padding-left:15px; text-indent:-15px;">• 다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업</div>
|
||||||
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
|
<div style="padding-left:15px; text-indent:-15px;">• 목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함</div>
|
||||||
• 다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업
|
|
||||||
</div>
|
|
||||||
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 8px;">
|
|
||||||
• 목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
|
<div style="margin-bottom: 12px;">
|
||||||
• <strong>BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</strong>
|
<div style="font-weight: bold; margin-bottom: 5px;">• BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</div>
|
||||||
</div>
|
<div style="padding-left:15px; text-indent:-15px;">• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
|
||||||
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
|
<div style="padding-left:15px; text-indent:-15px;">• 건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
|
||||||
• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구
|
<div style="font-size: 11px; color: #666; margin-top: 5px;">출처: 건설산업 BIM 기본지침, 국토교통부, 2020</div>
|
||||||
</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>
|
</div>
|
||||||
|
|
||||||
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
|
<div style="margin-bottom: 12px;">
|
||||||
• <strong>DX(Digital Transformation) : 산업 패러다임의 변화</strong>
|
<div style="font-weight: bold; margin-bottom: 5px;">• DX(Digital Transformation) : 산업 패러다임의 변화</div>
|
||||||
</div>
|
<div style="padding-left:15px; text-indent:-15px;">• 디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
|
||||||
<div style="padding-left: 30px; text-indent: -15px; margin-bottom: 4px;">
|
<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 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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- BIM과 핵심기술의 관계 -->
|
<!-- BIM과 핵심기술의 관계 섹션 -->
|
||||||
<div style="margin-bottom: 25px;">
|
<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;">
|
<div style="background: #f0fdf4; padding: 15px; border-radius: 8px;">
|
||||||
<h3 style="font-size: 12px; font-weight: bold; margin-bottom: 8px;">용어간 상호관계</h3>
|
<h3 style="font-size: 13px; font-weight: bold; margin-bottom: 10px;">용어간 상호관계</h3>
|
||||||
|
|
||||||
<div style="padding-left: 15px; text-indent: -15px; margin-bottom: 8px;">
|
<div style="padding-left:15px; text-indent:-15px; margin-bottom: 8px;">• DX는 BIM과 같은 디지털기술을 기반으로 산업 전반의 프로세스를 혁신하는 상위개념</div>
|
||||||
• 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="text-align: center; margin: 15px 0; padding: 10px; background: #f8f9fa; border-radius: 8px;">
|
<div style="padding-left:15px; text-indent:-15px; margin-bottom: 8px;">• 건설산업의 DX는 GIS(공간정보), BIM, 디지털 트윈(가상환경)의 기술융합을 통해서만 실현 또는 구현 가능</div>
|
||||||
[이미지: DX와 핵심기술간 상호관계, 경로: /assets/images/DX1.png]<br>
|
|
||||||
<span style="font-size: 11px; color: #666;">출처: [그림 1] DX와 핵심기술간 상호관계</span>
|
<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>
|
||||||
|
|
||||||
<div style="margin-top: 15px;">
|
<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>
|
||||||
</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="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; color: #0284c7; text-align: center;">
|
<div style="font-size: 14px; font-weight: bold; line-height: 1.5;">건설산업에서 DX는 상위 개념이고 BIM은 그 디지털 전환을 가능하게 하는 핵심 기술 중 하나다.</div>
|
||||||
건설산업에서 DX는 상위 개념이고 BIM은 그 디지털 전환을 가능하게 하는 핵심 기술 중 하나다.
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -251,28 +234,42 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="area-sidebar" style="overflow:hidden;">
|
<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="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="font-size:10px; color:#64748b; margin-bottom:12px; text-align:left;">용어 정의</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;">건설산업</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="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업</div>
|
<div style="font-size:12px; font-weight:700; text-decoration:underline; text-underline-offset:3px; margin-bottom:8px; color:#000;">건설산업</div>
|
||||||
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함</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>
|
||||||
|
|
||||||
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px; margin-bottom:10px;">
|
<!-- BIM 카드 -->
|
||||||
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</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="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
|
<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="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
|
<div style="font-size:11px; color:#666; margin-bottom:8px;">디지털 전환을 위한 핵심 기술</div>
|
||||||
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:9px; color:#64748b; line-height:1.6;">출처: 건설산업 BIM 기본지침, 국토교통부, 2020</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>
|
||||||
|
|
||||||
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px;">
|
<!-- DX 카드 -->
|
||||||
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">DX(Digital Transformation) : 산업 패러다임의 변화</div>
|
<div style="background:#ffffff; border-radius:8px; box-shadow:0 2px 8px rgba(0,0,0,0.06); padding:16px;">
|
||||||
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
|
<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="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함</div>
|
<div style="font-size:11px; color:#666; margin-bottom:8px;">산업 패러다임의 변화</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>
|
<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="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>
|
||||||
<div class="comparison-summary-card" style="margin-top:10px; background:#eff6ff; border:1px solid #bfdbfe; border-radius:8px; padding:12px;">
|
<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>
|
<div style="font-size:11px; font-weight:700; color:#1e3a8a; margin-bottom:6px;">DX와 BIM 핵심 비교</div>
|
||||||
@@ -284,8 +281,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="area-footer" style="overflow:hidden;">
|
<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="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 style="font-size: 14px; font-weight: 700; line-height: 1.5;">• BIM은 건설산업의 디지털전환(DX)을 수행하는 과정에서 가장 기초가 되는 일부분</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -11,9 +11,9 @@
|
|||||||
"block_count": 0,
|
"block_count": 0,
|
||||||
"blocks": [],
|
"blocks": [],
|
||||||
"clientHeight": 475,
|
"clientHeight": 475,
|
||||||
"excess_px": 408,
|
"excess_px": 510,
|
||||||
"overflowed": true,
|
"overflowed": true,
|
||||||
"scrollHeight": 883
|
"scrollHeight": 985
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"block_count": 0,
|
"block_count": 0,
|
||||||
@@ -27,9 +27,9 @@
|
|||||||
"block_count": 0,
|
"block_count": 0,
|
||||||
"blocks": [],
|
"blocks": [],
|
||||||
"clientHeight": 475,
|
"clientHeight": 475,
|
||||||
"excess_px": 122,
|
"excess_px": 145,
|
||||||
"overflowed": true,
|
"overflowed": true,
|
||||||
"scrollHeight": 597
|
"scrollHeight": 620
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,8 +7,14 @@
|
|||||||
|
|
||||||
## Validation Summary
|
## 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
|
## Measurement
|
||||||
```json
|
```json
|
||||||
@@ -25,9 +31,9 @@
|
|||||||
"block_count": 0,
|
"block_count": 0,
|
||||||
"blocks": [],
|
"blocks": [],
|
||||||
"clientHeight": 475,
|
"clientHeight": 475,
|
||||||
"excess_px": 408,
|
"excess_px": 510,
|
||||||
"overflowed": true,
|
"overflowed": true,
|
||||||
"scrollHeight": 883
|
"scrollHeight": 985
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"block_count": 0,
|
"block_count": 0,
|
||||||
@@ -41,19 +47,21 @@
|
|||||||
"block_count": 0,
|
"block_count": 0,
|
||||||
"blocks": [],
|
"blocks": [],
|
||||||
"clientHeight": 475,
|
"clientHeight": 475,
|
||||||
"excess_px": 122,
|
"excess_px": 145,
|
||||||
"overflowed": true,
|
"overflowed": true,
|
||||||
"scrollHeight": 597
|
"scrollHeight": 620
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Final Decision
|
## Final Decision
|
||||||
- 판정: `pass`
|
- 판정: `revise`
|
||||||
|
|
||||||
## Failure Classification
|
## Failure Classification
|
||||||
- 없음
|
- Verify-CoreMessage
|
||||||
|
- Verify-RenderZone
|
||||||
|
|
||||||
## Next Action
|
## Next Action
|
||||||
1. 없음
|
1. overflow가 발생한 zone(body, sidebar)의 content budget, block 수, typography를 재조정한다.
|
||||||
|
2. 핵심 메시지 `DX는 상위 개념`, `BIM은 핵심 기술`을 가시 텍스트에 직접 노출한다.
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
KPI / 판정 결과
|
KPI / 판정 결과
|
||||||
- 판정: pass
|
- 판정: pass
|
||||||
- iteration: 1
|
- iteration: 1
|
||||||
|
- 종료 코드: 0
|
||||||
|
- 필수 산출물 4종 유효 여부: True
|
||||||
|
|
||||||
실패 분류
|
실패 분류
|
||||||
- 없음
|
- 없음
|
||||||
@@ -23,3 +25,4 @@ KPI / 판정 결과
|
|||||||
다음 단계 전달물
|
다음 단계 전달물
|
||||||
- 최신 실행 산출물
|
- 최신 실행 산출물
|
||||||
- 최신 measurement
|
- 최신 measurement
|
||||||
|
- 최신 context
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
실행 요약
|
실행 요약
|
||||||
- iteration 1 기준으로 최종 산출물과 측정 결과를 다시 검증했다.
|
- iteration 1 기준으로 최종 산출물과 측정 결과를 다시 검증했다.
|
||||||
- 이미지 캡션 보존과 비교 핵심 4축의 가시 보존 여부를 확인했다.
|
- slide overflow: False
|
||||||
- 최종 판정은 `pass`이다.
|
- zone overflow: body, sidebar
|
||||||
|
- 최종 판정은 `revise`이다.
|
||||||
|
|
||||||
산출물 경로
|
산출물 경로
|
||||||
- `docs/run-001/06-validation/validation-result.md`
|
- `docs/run-001/06-validation/validation-result.md`
|
||||||
@@ -9,12 +10,13 @@
|
|||||||
- `docs/run-001/05-execution/measurement.json`
|
- `docs/run-001/05-execution/measurement.json`
|
||||||
|
|
||||||
KPI / 판정 결과
|
KPI / 판정 결과
|
||||||
- 판정: pass
|
- 판정: revise
|
||||||
- 실패 분류: 없음
|
- 실패 분류: Verify-CoreMessage, Verify-RenderZone
|
||||||
|
|
||||||
수정 액션
|
수정 액션
|
||||||
- 없음
|
- overflow가 발생한 zone(body, sidebar)의 content budget, block 수, typography를 재조정한다.
|
||||||
|
- 핵심 메시지 `DX는 상위 개념`, `BIM은 핵심 기술`을 가시 텍스트에 직접 노출한다.
|
||||||
|
|
||||||
다음 단계 전달물
|
다음 단계 전달물
|
||||||
- 최신 validation 기록
|
- 최신 validation 기록
|
||||||
- 다음 iteration 여부: 중단
|
- 다음 iteration 여부: 재실행
|
||||||
|
|||||||
@@ -1,61 +1,76 @@
|
|||||||
목적
|
목적
|
||||||
- 계획에 따라 실제 실행을 수행하고 산출물을 저장한다.
|
- 계획된 stage를 실제로 실행하고, 검증에 필요한 실행 패키지를 완전하게 남긴다.
|
||||||
|
|
||||||
입력
|
입력
|
||||||
- Step 4 결과 경로:
|
- Step 4 결과 경로:
|
||||||
- 실행에 사용할 코드/스크립트:
|
- 실행에 사용할 코드/스크립트:
|
||||||
|
|
||||||
실행 방법
|
실행 방법
|
||||||
1. 계획된 stage를 순서대로 수행한다.
|
1. Step 4에서 확정한 실행 계획과 입력 산출물을 사용해 실제 실행을 수행한다.
|
||||||
2. stage별 산출물을 저장한다.
|
2. 아래 `필수 산출 항목`을 모두 생성하거나 기록한다.
|
||||||
3. 경고와 재시도 이력을 남긴다.
|
3. 실행 종료 코드, 예외 유무, 산출물 파일 존재 여부를 확인한다.
|
||||||
4. 최종 결과물 경로를 연결한다.
|
4. `measurement.json`과 `context.json`이 다음 단계에서 재검증 가능할 정도로 완전한지 확인한다.
|
||||||
5. 저장 누락과 실행 중단 여부를 점검한다.
|
5. `판정 규칙`에 따라 pass / revise / fail을 결정한다.
|
||||||
|
6. 실패 시 `실패 분류`와 `수정 액션`을 함께 기록한다.
|
||||||
|
|
||||||
필수 산출 항목
|
필수 산출 항목
|
||||||
- E1. 실제 실행 경로 기록
|
- E1. 실행 명령 또는 실행 스크립트 1개
|
||||||
- E2. 산출물 파일 1개 이상 생성
|
- E2. 입력 파일 경로 1개
|
||||||
- E3. 중간 또는 최종 결과 경로 기록
|
- E3. `final.html` 생성
|
||||||
- E4. 경고 사항 기록
|
- E4. `generated_html.json` 생성
|
||||||
- E5. 재시도 이력 기록 (없으면 없음으로 표기)
|
- 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 / 판정 규칙
|
KPI / 판정 규칙
|
||||||
- 충족률 = 충족 항목 수 / 5
|
- 충족률 = 충족 항목 수 / 8
|
||||||
- pass: 충족률 100% and 치명 항목(E1, E2, E3) 모두 충족
|
- 치명 항목 = E1, E2, E3, E4, E5, E6
|
||||||
- revise: 충족률 80% 이상 100% 미만 and 치명 항목 모두 충족
|
- `pass`: 충족률 100% and 치명 항목 모두 충족 and 실행 종료 코드 0 and 필수 산출물 4종이 모두 유효함
|
||||||
- fail: 충족률 80% 미만 or 치명 항목 1개 이상 누락
|
- `revise`: 충족률 87.5% 이상 100% 미만 and 치명 항목 모두 충족 and 실행은 완료되었으나 경고/재시도/리스크 기록 보강이 필요함
|
||||||
|
- `fail`: 충족률 87.5% 미만 or 치명 항목 1개 이상 누락 or 실행 종료 코드 비정상 or 필수 산출물 4종 중 1개 이상 무효
|
||||||
|
|
||||||
실패 분류
|
실패 분류
|
||||||
- Exec-Run: 실행 중단
|
- `Exec-Exit`: 실행 종료 코드 비정상
|
||||||
- Exec-Artifact: 산출물 생성 실패
|
- `Exec-Artifact`: 산출물 파일 생성 실패 또는 0 byte
|
||||||
- Exec-Trace: 실행 경로 추적 불가
|
- `Exec-Measurement`: `measurement.json` 누락/파싱 실패/필수 키 누락
|
||||||
- Exec-Warn: 경고/재시도 기록 누락
|
- `Exec-Context`: `context.json` 누락 또는 재검증 정보 부족
|
||||||
- Exec-Tool: 도구/스크립트 문제
|
- `Exec-Trace`: 실행 명령, 입력, 경고 이력 추적 불가
|
||||||
|
- `Exec-Tool`: 도구/스크립트 자체 오류
|
||||||
|
|
||||||
수정 액션 가이드
|
수정 액션 가이드
|
||||||
- Exec-Run: 중단 지점 재확인 후 해당 stage 재실행
|
- `Exec-Exit`: 실패한 stage와 stderr를 확인하고 해당 stage부터 재실행
|
||||||
- Exec-Artifact: 산출물 경로와 저장 로직 점검 후 재생성
|
- `Exec-Artifact`: 산출물 저장 경로와 쓰기 로직을 점검하고 파일 재생성
|
||||||
- Exec-Trace: 사용한 스크립트/명령/입력을 다시 기록
|
- `Exec-Measurement`: 렌더/측정 단계를 재실행하고 필수 키 존재 여부 재검사
|
||||||
- Exec-Warn: 경고와 재시도 이력을 보강
|
- `Exec-Context`: 컨텍스트 저장 로직을 복구하고 입력/분석 정보 재저장
|
||||||
- Exec-Tool: 도구 오류 분리 후 수정
|
- `Exec-Trace`: 사용한 스크립트, 명령, 입력 경로, 경고 이력을 다시 기록
|
||||||
|
- `Exec-Tool`: 실행 스크립트 또는 코드 오류를 수정 후 재실행
|
||||||
|
|
||||||
실행 결과 기록
|
실행 결과 기록
|
||||||
- 사용한 실행 경로:
|
- 사용한 실행 명령 또는 스크립트:
|
||||||
- 생성된 산출물:
|
- 입력 파일 경로:
|
||||||
|
- 생성된 산출물 경로:
|
||||||
|
- 실행 종료 코드:
|
||||||
- 경고:
|
- 경고:
|
||||||
- 재시도 이력:
|
- 재시도 이력:
|
||||||
|
- 예외:
|
||||||
|
- Step 6 전달 리스크/확인 포인트:
|
||||||
- 충족 항목 수:
|
- 충족 항목 수:
|
||||||
- 충족률:
|
- 충족률:
|
||||||
- 실패 분류:
|
- 실패 분류:
|
||||||
@@ -65,4 +80,7 @@ KPI / 판정 규칙
|
|||||||
- pass / revise / fail
|
- pass / revise / fail
|
||||||
|
|
||||||
다음 단계 전달물
|
다음 단계 전달물
|
||||||
- Step 6에서 사용할 실행 결과와 산출물 경로
|
- Step 6에서 사용할 `final.html`
|
||||||
|
- Step 6에서 사용할 `generated_html.json`
|
||||||
|
- Step 6에서 사용할 `measurement.json`
|
||||||
|
- Step 6에서 사용할 `context.json`
|
||||||
|
|||||||
@@ -1,76 +1,95 @@
|
|||||||
목적
|
목적
|
||||||
- 최종 결과가 목적과 제약에 맞는지 검증하고, 다음 run을 위한 개선 방향을 기록한다.
|
- 최종 결과가 목적과 제약에 맞는지 검증하고, 다음 반복에서 무엇을 되돌려 수정해야 하는지 명확하게 결정한다.
|
||||||
|
|
||||||
입력
|
입력
|
||||||
- Step 5 결과 경로:
|
- Step 5 결과 경로:
|
||||||
- 최종 산출물 경로:
|
- 최종 산출물 경로:
|
||||||
|
|
||||||
실행 방법
|
실행 방법
|
||||||
1. 목적 적합성을 평가한다.
|
1. 핵심 목적 문구가 결과물의 가시 텍스트에 실제로 남아 있는지 확인한다.
|
||||||
2. 내용 보존을 평가한다.
|
2. 원문에서 반드시 보존해야 하는 핵심 정보가 결과물의 가시 영역에 남아 있는지 확인한다.
|
||||||
3. 렌더링/측정 결과를 평가한다.
|
3. `measurement.json` 기준으로 slide와 각 zone의 overflow를 확인한다.
|
||||||
4. 최종 판정을 적는다.
|
4. 실패가 있으면 실패 분류와 되돌림 지점을 기록한다.
|
||||||
5. 다음 액션과 되돌림 지점을 기록한다.
|
5. `판정 규칙`에 따라 pass / revise / fail을 결정한다.
|
||||||
6. 실패 원인을 분류한다.
|
6. 다음 반복에서 바로 사용할 수정 액션을 우선순위 순서로 적는다.
|
||||||
|
|
||||||
필수 산출 항목
|
필수 검증 항목
|
||||||
- F1. 목적 적합성 평가
|
- F1. 핵심 목적 적합성 평가 1개
|
||||||
- F2. 내용 보존 평가
|
- F2. 핵심 메시지 가시성 평가 1개
|
||||||
- F3. 렌더링/측정 평가
|
- F3. 이미지/도해 참조 보존 평가 1개
|
||||||
- F4. 최종 판정 1개
|
- F4. 비교 핵심 정보 보존 평가 1개
|
||||||
- F5. 실패 원인 분류 1개 이상 (실패 시)
|
- F5. 렌더링/측정 평가 1개
|
||||||
- F6. 다음 액션 1개 이상
|
- F6. 최종 판정 1개
|
||||||
- F7. 되돌림 지점 명시
|
- F7. 실패 원인 분류 1개 이상 (`pass`가 아니면 필수)
|
||||||
|
- F8. 수정 액션 1개 이상
|
||||||
|
- F9. 되돌림 지점 1개 명시
|
||||||
|
|
||||||
성공 기준
|
성공 기준
|
||||||
- F1~F7 전부 작성됨
|
- F1~F9 전부 작성됨
|
||||||
- 최종 판정이 명확함
|
- 핵심 메시지(`DX는 상위 개념`, `BIM은 핵심 기술`)가 결과물의 가시 텍스트에 존재함
|
||||||
- 실패 시 실패 원인과 수정 방향이 분명함
|
- 이미지/도해 참조 문구(`DX와 핵심기술간 상호관계`)가 가시 텍스트에 존재함
|
||||||
- 다음 run으로 넘길 개선 사항이 존재함
|
- 비교 핵심 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 / 판정 규칙
|
KPI / 판정 규칙
|
||||||
- 충족률 = 충족 항목 수 / 7
|
- 충족률 = 충족 항목 수 / 9
|
||||||
- pass: 충족률 100% and 치명 항목(F1, F2, F3, F4) 모두 충족
|
- 치명 항목 = F2, F3, F4, F5, F6, F9
|
||||||
- revise: 충족률 86% 이상 100% 미만 and 치명 항목 모두 충족
|
- `pass`: 충족률 100% and 치명 항목 모두 충족 and slide/zone overflow 0건 and 핵심 메시지/이미지 참조/비교 4축이 모두 가시 텍스트에 존재
|
||||||
- fail: 충족률 86% 미만 or 치명 항목 1개 이상 누락
|
- `revise`: 검증 결과를 해석할 수 있고 치명적 시스템 오류는 없으나, 품질 게이트(F2~F5) 중 1개 이상 미충족
|
||||||
|
- `fail`: 검증 자체가 불가능함 or 치명 항목 1개 이상 기록 불가 or 측정/결과 파일 누락으로 판정 불가
|
||||||
|
|
||||||
실패 분류
|
실패 분류
|
||||||
- Verify-Purpose: 목적 적합성 불충분
|
- `Verify-Purpose`: 중심 메시지와 결과물 목적이 어긋남
|
||||||
- Verify-Preserve: 내용 보존 실패
|
- `Verify-CoreMessage`: 핵심 메시지 가시 텍스트 누락
|
||||||
- Verify-Render: 렌더/측정 실패
|
- `Verify-ImageRef`: 이미지/도해 참조 문구 누락
|
||||||
- Verify-Judgement: 최종 판정 불명확
|
- `Verify-ComparisonVisible`: 비교 핵심 4축이 가시 영역에 없음
|
||||||
- Verify-Action: 다음 액션 부족
|
- `Verify-RenderSlide`: slide overflow 발생
|
||||||
- Verify-Rollback: 되돌림 지점 미정
|
- `Verify-RenderZone`: body/sidebar/footer zone overflow 발생
|
||||||
|
- `Verify-Trace`: 검증 파일/측정 파일 해석 불가
|
||||||
|
- `Verify-Action`: 수정 액션 부족
|
||||||
|
- `Verify-Rollback`: 되돌림 지점 미정
|
||||||
|
|
||||||
수정 액션 가이드
|
수정 액션 가이드
|
||||||
- Verify-Purpose: 중심 메시지와 결과물의 일치 여부 재검토
|
- `Verify-Purpose`: 중심 메시지 문장을 본문 또는 footer의 가시 텍스트에 다시 배치
|
||||||
- Verify-Preserve: 누락/과잉 생성/왜곡 항목 보강
|
- `Verify-CoreMessage`: `DX는 상위 개념`, `BIM은 핵심 기술` 문구를 더 직접적으로 노출
|
||||||
- Verify-Render: overflow 또는 배치 문제 수정
|
- `Verify-ImageRef`: 이미지 캡션 또는 이미지 참조 문구를 숨김 영역이 아닌 가시 블록으로 이동
|
||||||
- Verify-Judgement: pass/revise/fail 판정 근거를 다시 명시
|
- `Verify-ComparisonVisible`: 비교 핵심 4축을 화면에 바로 보이는 bullet/card/table 요약으로 강제
|
||||||
- Verify-Action: 다음 run 개선 항목을 최소 1개 이상 추가
|
- `Verify-RenderSlide`: 전체 slide budget 또는 레이아웃 구조 재조정
|
||||||
- Verify-Rollback: 어느 step으로 되돌릴지 명시
|
- `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
|
- pass / revise / fail
|
||||||
|
|
||||||
다음 단계 전달물
|
다음 단계 전달물
|
||||||
- 다음 run 시작 전에 참고할 검증 결과와 개선 사항
|
- 다음 반복 시작 전에 참고할 실패 분류 목록
|
||||||
|
- 다음 반복 시작 전에 적용할 수정 액션 목록
|
||||||
|
- 되돌릴 stage 또는 step
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ from src.renderer import render_slide_from_html # type: ignore
|
|||||||
from src.slide_measurer import measure_rendered_heights # type: ignore
|
from src.slide_measurer import measure_rendered_heights # type: ignore
|
||||||
|
|
||||||
COMPARISON_MARKER = "comparison-summary-card"
|
COMPARISON_MARKER = "comparison-summary-card"
|
||||||
|
COMPARE_KEYS = ["범위", "프로세스", "성과품", "확장성"]
|
||||||
|
CORE_MESSAGE_KEYS = ["DX는 상위 개념", "BIM은 핵심 기술"]
|
||||||
|
IMAGE_REFERENCE_KEY = "DX와 핵심기술간 상호관계"
|
||||||
|
|
||||||
|
|
||||||
def read_json(path: Path) -> dict:
|
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)
|
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]]:
|
def validate_outputs(generated: dict, measurement: dict) -> tuple[str, list[str], list[str]]:
|
||||||
visible = "\n".join([
|
body_html = generated.get("body_html", "")
|
||||||
generated.get("body_html", ""),
|
sidebar_html = generated.get("sidebar_html", "")
|
||||||
generated.get("sidebar_html", ""),
|
footer_html = generated.get("footer_html", "")
|
||||||
generated.get("footer_html", ""),
|
text = strip_tags("\n".join([body_html, sidebar_html, footer_html]))
|
||||||
])
|
|
||||||
text = strip_tags(visible)
|
|
||||||
|
|
||||||
failures: list[str] = []
|
failures: list[str] = []
|
||||||
actions: list[str] = []
|
actions: list[str] = []
|
||||||
|
|
||||||
if measurement.get("slide", {}).get("overflowed"):
|
slide_overflow = measurement.get("slide", {}).get("overflowed")
|
||||||
failures.append("Verify-Render")
|
zone_overflows = zone_overflow_names(measurement)
|
||||||
actions.append("overflow가 발생한 영역의 budget 또는 HTML 구조를 조정한다.")
|
|
||||||
|
|
||||||
if "DX와 핵심기술간 상호관계" not in text:
|
if slide_overflow:
|
||||||
failures.append("Verify-Preserve")
|
failures.append("Verify-RenderSlide")
|
||||||
actions.append("이미지 캡션 또는 이미지 참조 문구를 본문 가시 텍스트로 남긴다.")
|
actions.append("slide 전체 overflow를 해소하도록 layout budget 또는 전체 레이아웃 구조를 조정한다.")
|
||||||
|
|
||||||
compare_keys = ["범위", "프로세스", "성과품", "확장성"]
|
if zone_overflows:
|
||||||
if not all(k in text for k in compare_keys):
|
failures.append("Verify-RenderZone")
|
||||||
failures.append("Verify-Preserve")
|
actions.append(f"overflow가 발생한 zone({', '.join(zone_overflows)})의 content budget, block 수, typography를 재조정한다.")
|
||||||
actions.append("비교 핵심 4축을 숨김 팝업이 아니라 보이는 요약 블록으로 유지한다.")
|
|
||||||
|
|
||||||
if "DX는 상위 개념" not in text and "상위 개념" not in text:
|
if not all(key in text for key in CORE_MESSAGE_KEYS):
|
||||||
failures.append("Verify-Purpose")
|
failures.append("Verify-CoreMessage")
|
||||||
actions.append("핵심 메시지 문장을 더 선명하게 본문 또는 footer에 유지한다.")
|
actions.append("핵심 메시지 `DX는 상위 개념`, `BIM은 핵심 기술`을 가시 텍스트에 직접 노출한다.")
|
||||||
|
|
||||||
status = "pass" if not failures else "revise"
|
if IMAGE_REFERENCE_KEY not in text:
|
||||||
return status, sorted(set(failures)), actions
|
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:
|
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 "재작업 필요"
|
status_line = "통과" if status == "pass" else "재작업 필요"
|
||||||
failure_lines = "\n".join(f"- {f}" for f in failures) if failures 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. 없음"
|
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
|
## Validation Summary
|
||||||
- 실행 경로 검증: 통과
|
- 실행 경로 검증: 통과
|
||||||
- 렌더링/측정 검증: {'통과' if not measurement.get('slide', {}).get('overflowed') else '실패'}
|
- 렌더링/측정 검증: {'통과' if render_ok else '실패'}
|
||||||
- 최종 품질 판정: {status_line}
|
- 최종 품질 판정: {status_line}
|
||||||
|
|
||||||
|
## Render Gates
|
||||||
|
- slide overflow: {slide_overflow}
|
||||||
|
{chr(10).join(zone_lines)}
|
||||||
|
|
||||||
## Measurement
|
## Measurement
|
||||||
```json
|
```json
|
||||||
{json.dumps(measurement, ensure_ascii=False, indent=2)}
|
{json.dumps(measurement, ensure_ascii=False, indent=2)}
|
||||||
@@ -176,19 +207,79 @@ def main() -> None:
|
|||||||
for iteration in range(1, args.max_iterations + 1):
|
for iteration in range(1, args.max_iterations + 1):
|
||||||
cmd = [
|
cmd = [
|
||||||
sys.executable,
|
sys.executable,
|
||||||
str(repo_root / 'scripts' / 'run_from_artifacts.py'),
|
str(repo_root / "scripts" / "run_from_artifacts.py"),
|
||||||
"--input", str(input_file),
|
"--input", str(input_file),
|
||||||
"--stage1a", str(stage1a),
|
"--stage1a", str(stage1a),
|
||||||
"--stage1b", str(stage1b),
|
"--stage1b", str(stage1b),
|
||||||
"--output-dir", str(output_dir),
|
"--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"
|
generated_path = output_dir / "generated_html.json"
|
||||||
context_path = output_dir / "context.json"
|
context_path = output_dir / "context.json"
|
||||||
final_html_path = output_dir / "final.html"
|
final_html_path = output_dir / "final.html"
|
||||||
measurement_path = output_dir / "measurement.json"
|
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)
|
generated = read_json(generated_path)
|
||||||
context = read_json(context_path)
|
context = read_json(context_path)
|
||||||
changed = inject_visible_comparison_summary(generated)
|
changed = inject_visible_comparison_summary(generated)
|
||||||
@@ -204,6 +295,11 @@ def main() -> None:
|
|||||||
status, failures, actions = validate_outputs(generated, measurement)
|
status, failures, actions = validate_outputs(generated, measurement)
|
||||||
validation_path.write_text(build_validation_markdown(args.run_id, status, failures, actions, measurement), encoding="utf-8")
|
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"""실행 요약
|
step5_body = f"""실행 요약
|
||||||
- auto_loop_runner.py iteration {iteration}로 실행했다.
|
- auto_loop_runner.py iteration {iteration}로 실행했다.
|
||||||
- 입력: `docs/{args.run_id}/01-input/{input_file.name}`
|
- 입력: `docs/{args.run_id}/01-input/{input_file.name}`
|
||||||
@@ -217,22 +313,26 @@ def main() -> None:
|
|||||||
- `docs/{args.run_id}/05-execution/context.json`
|
- `docs/{args.run_id}/05-execution/context.json`
|
||||||
|
|
||||||
KPI / 판정 결과
|
KPI / 판정 결과
|
||||||
- 판정: pass
|
- 판정: {step5_status}
|
||||||
- iteration: {iteration}
|
- iteration: {iteration}
|
||||||
|
- 종료 코드: {completed.returncode}
|
||||||
|
- 필수 산출물 4종 유효 여부: {critical_outputs_ok}
|
||||||
|
|
||||||
실패 분류
|
실패 분류
|
||||||
- 없음
|
- {step5_failures}
|
||||||
|
|
||||||
수정 액션
|
수정 액션
|
||||||
- 없음
|
{step5_actions}
|
||||||
|
|
||||||
다음 단계 전달물
|
다음 단계 전달물
|
||||||
- 최신 실행 산출물
|
- 최신 실행 산출물
|
||||||
- 최신 measurement
|
- 최신 measurement
|
||||||
|
- 최신 context
|
||||||
"""
|
"""
|
||||||
step6_body = f"""실행 요약
|
step6_body = f"""실행 요약
|
||||||
- iteration {iteration} 기준으로 최종 산출물과 측정 결과를 다시 검증했다.
|
- iteration {iteration} 기준으로 최종 산출물과 측정 결과를 다시 검증했다.
|
||||||
- 이미지 캡션 보존과 비교 핵심 4축의 가시 보존 여부를 확인했다.
|
- slide overflow: {measurement.get('slide', {}).get('overflowed')}
|
||||||
|
- zone overflow: {', '.join(zone_names) if zone_names else '없음'}
|
||||||
- 최종 판정은 `{status}`이다.
|
- 최종 판정은 `{status}`이다.
|
||||||
|
|
||||||
산출물 경로
|
산출물 경로
|
||||||
@@ -267,6 +367,3 @@ KPI / 판정 결과
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user