8f1ff34cc9
- Task 3: phase2_verification_scripts.py 테스트 (샘플 데이터) ✅ - Task 4: 5개 리포트 템플릿 작성 ✅ - Task 5: SQL 쿼리 검증 (실제 데이터) - 메트릭 데이터 미채움 확인 ✅ - Task 6: 자동화 도구 & Go/No-Go 기준 통합 ✅ 발견 사항: • Phase 1: 304개 행 생성 (9일 누적) • 문제: metrics_json 필드 모두 비어있음 (0%) • 영향: Phase 2 검증 불가능 (데이터 필요) • 상태: 2026-11-01 재검증 예정 AGENTS.md v16.0 준수: ✅ 정공법: 근본 원인 분석 (메트릭 미저장) ✅ 현장감: 실제 데이터 검증 ✅ 과유불급: 필요한 준비만 완료 ✅ 재현성: 모든 스크립트 버전 관리 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
166 lines
5.5 KiB
PowerShell
166 lines
5.5 KiB
PowerShell
# Phase 2 자동화 실행 스크립트 (PowerShell)
|
|
# 날짜: 2026-11-01 예정
|
|
# 용도: Phase 1 데이터 검증 → Phase 3 Go/No-Go 판단
|
|
|
|
param(
|
|
[string]$DataFile = "",
|
|
[switch]$DryRun = $false
|
|
)
|
|
|
|
# 색상 정의
|
|
$Green = "Green"
|
|
$Yellow = "Yellow"
|
|
$Red = "Red"
|
|
|
|
Write-Host "`n════════════════════════════════════" -ForegroundColor $Green
|
|
Write-Host "Phase 2 자동화 검증 도구" -ForegroundColor $Green
|
|
Write-Host "════════════════════════════════════`n" -ForegroundColor $Green
|
|
|
|
# 1. 환경 설정
|
|
Write-Host "[Step 1] 환경 설정" -ForegroundColor $Yellow
|
|
$ProjectDir = (Get-Item -Path $PSScriptRoot).Parent.FullName
|
|
$ToolsDir = Join-Path $ProjectDir "tools"
|
|
$ReportsDir = Join-Path $ProjectDir "docs\Phase2Reports"
|
|
$LogDir = Join-Path $ProjectDir "logs"
|
|
$DataDir = Join-Path $ProjectDir "data\phase1"
|
|
|
|
# 디렉토리 생성
|
|
@($LogDir, $DataDir, $ReportsDir) | ForEach-Object {
|
|
if (-not (Test-Path $_)) {
|
|
New-Item -ItemType Directory -Path $_ -Force | Out-Null
|
|
}
|
|
}
|
|
|
|
$Timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
|
$LogFile = Join-Path $LogDir "phase2_execution_${Timestamp}.log"
|
|
|
|
Write-Host "Project Dir: $ProjectDir"
|
|
Write-Host "Reports Dir: $ReportsDir"
|
|
Write-Host "Log File: $LogFile"
|
|
Write-Host "✅ 환경 준비 완료`n" -ForegroundColor $Green
|
|
|
|
# 2. 데이터 준비
|
|
Write-Host "[Step 2] 데이터 준비" -ForegroundColor $Yellow
|
|
|
|
if ([string]::IsNullOrEmpty($DataFile)) {
|
|
# sample_phase1_data.csv 사용
|
|
$DataFile = Join-Path $ToolsDir "sample_phase1_data.csv"
|
|
Write-Host "샘플 데이터 사용: $DataFile"
|
|
} else {
|
|
if (-not (Test-Path $DataFile)) {
|
|
Write-Host "❌ 데이터 파일을 찾을 수 없습니다: $DataFile" -ForegroundColor $Red
|
|
exit 1
|
|
}
|
|
Write-Host "사용자 데이터: $DataFile"
|
|
}
|
|
|
|
Write-Host "✅ 데이터 준비 완료`n" -ForegroundColor $Green
|
|
|
|
# 3. 검증 스크립트 실행
|
|
Write-Host "[Step 3] Phase 2 검증 실행" -ForegroundColor $Yellow
|
|
Write-Host "PBO, DSR, OOS 검증 중...`n"
|
|
|
|
Set-Location $ProjectDir
|
|
|
|
if ($DryRun) {
|
|
Write-Host "🔄 DRY-RUN 모드: 실제 실행하지 않습니다"
|
|
Write-Host "실행 명령어: python tools/phase2_verification_scripts.py $DataFile"
|
|
} else {
|
|
# 실제 검증 실행
|
|
python tools/phase2_verification_scripts.py $DataFile 2>&1 | Tee-Object -FilePath $LogFile
|
|
}
|
|
|
|
$VerificationResult = Join-Path $ProjectDir "phase2_results.json"
|
|
|
|
if (Test-Path $VerificationResult) {
|
|
Write-Host "`n✅ 검증 완료: $VerificationResult`n" -ForegroundColor $Green
|
|
} else {
|
|
Write-Host "`n❌ 검증 결과 파일 없음`n" -ForegroundColor $Red
|
|
exit 1
|
|
}
|
|
|
|
# 4. 결과 분석
|
|
Write-Host "[Step 4] 결과 분석" -ForegroundColor $Yellow
|
|
|
|
$Results = Get-Content $VerificationResult | ConvertFrom-Json
|
|
|
|
$PboPass = $Results.pbo.passed
|
|
$DsrPass = $Results.dsr.passed
|
|
$OosPass = $Results.oos.passed
|
|
|
|
Write-Host "`n📊 Phase 2 검증 결과:" -ForegroundColor $Green
|
|
Write-Host "=" * 50
|
|
Write-Host " PBO < 20%: $(if ($PboPass) {'✅ PASS'} else {'❌ FAIL'}) ($($Results.pbo.pbo_pct)%)"
|
|
Write-Host " DSR > 0.5: $(if ($DsrPass) {'✅ PASS'} else {'❌ FAIL'}) ($($Results.dsr.dsr))"
|
|
Write-Host " OOS < 2.5%: $(if ($OosPass) {'✅ PASS'} else {'❌ FAIL'}) ($($Results.oos.drift_pct)%)"
|
|
Write-Host "=" * 50
|
|
|
|
# Go/No-Go 판단
|
|
$AllPass = $PboPass -and $DsrPass -and $OosPass
|
|
$Decision = if ($AllPass) { "GO PHASE 3 🚀" } else { "RE-EVALUATE ⚠️" }
|
|
|
|
Write-Host "`n🎯 FINAL DECISION: $Decision`n" -ForegroundColor $(if ($AllPass) { $Green } else { $Yellow })
|
|
|
|
if ($AllPass) {
|
|
Write-Host "✅ Phase 3 진행 승인" -ForegroundColor $Green
|
|
} else {
|
|
Write-Host "❌ Phase 3 진행 불가 - 재검토 필요" -ForegroundColor $Yellow
|
|
}
|
|
|
|
# 5. 최종 리포트 생성
|
|
Write-Host "`n[Step 5] 최종 리포트 생성" -ForegroundColor $Yellow
|
|
|
|
$ReportContent = @"
|
|
# Phase 2 자동화 실행 리포트
|
|
|
|
**실행 날짜:** $Timestamp
|
|
**결과:** $Decision
|
|
|
|
## 검증 결과
|
|
|
|
| 메트릭 | 값 | 기준 | 상태 |
|
|
|--------|-----|------|------|
|
|
| PBO | $($Results.pbo.pbo_pct)% | < 20% | $(if ($PboPass) {'✅ PASS'} else {'❌ FAIL'}) |
|
|
| DSR | $($Results.dsr.dsr) | > 0.5 | $(if ($DsrPass) {'✅ PASS'} else {'❌ FAIL'}) |
|
|
| OOS | $($Results.oos.drift_pct)% | < 2.5% | $(if ($OosPass) {'✅ PASS'} else {'❌ FAIL'}) |
|
|
|
|
## 의사결정
|
|
|
|
**최종 판단:** $Decision
|
|
|
|
## 다음 단계
|
|
|
|
1. CTO 승인 확인
|
|
2. CFO 최종 검토
|
|
3. Phase 3 배포 준비 시작
|
|
|
|
---
|
|
|
|
**Report Generated:** $(Get-Date -Format "yyyy-MM-dd HH:mm:ss")
|
|
"@
|
|
|
|
$ReportFile = Join-Path $ReportsDir "PHASE_2_EXECUTION_SUMMARY_${Timestamp}.md"
|
|
$ReportContent | Out-File -FilePath $ReportFile -Encoding UTF8
|
|
|
|
Write-Host "✅ 리포트 생성 완료`n" -ForegroundColor $Green
|
|
|
|
# 6. 요약
|
|
Write-Host "`n════════════════════════════════════" -ForegroundColor $Green
|
|
Write-Host "Phase 2 자동화 완료" -ForegroundColor $Green
|
|
Write-Host "════════════════════════════════════`n" -ForegroundColor $Green
|
|
|
|
Write-Host "📋 생성된 파일:" -ForegroundColor $Green
|
|
Write-Host " • 검증 결과: $VerificationResult"
|
|
Write-Host " • 실행 로그: $LogFile"
|
|
Write-Host " • 최종 리포트: $ReportFile"
|
|
Write-Host ""
|
|
Write-Host "📧 알림: 결과를 검토하고 팀과 공유하세요" -ForegroundColor $Yellow
|
|
Write-Host ""
|
|
|
|
# 종료 코드
|
|
if ($AllPass) {
|
|
exit 0
|
|
} else {
|
|
exit 1
|
|
}
|