문서 품질 critic와 golden 회귀를 고도화해 PPTX·HTML·DOCX·XLSX 마감 품질을 강화한다
- ArtifactQualityReviewService를 확장해 HTML의 board/strategy decision gap, DOCX evidence table·callout 부족, XLSX dashboard trend·variance·sheet summary·headline tile 부족을 개별 이슈로 판정하도록 보강 - ArtifactRepairGuideService와 DeckRepairGuideService를 보강해 decision summary, next steps, evidence table, trend/variance, dashboard tile 등 실제 보강 행동을 바로 제안하는 repair guide를 반환하도록 정리 - ExcelSkill review 입력을 세분화하고 Html/PPT golden 테스트를 strategy brief, PMO steering 시나리오까지 확대해 문서군 golden 회귀 범위를 넓힘 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_finish_batch\\ -p:IntermediateOutputPath=obj\\verify_doc_finish_batch\\ / dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal (ArtifactQualityReviewServiceTests, ArtifactRepairGuideServiceTests, DeckQualityReviewServiceTests, DeckRepairGuideServiceTests, HtmlSkillGoldenReportTests, PptxSkillGoldenDeckTests, DocxSkillGoldenDocumentTests, ExcelSkillGoldenWorkbookTests) -p:OutputPath=bin\\verify_doc_finish_batch_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_finish_batch_tests\
This commit is contained in:
@@ -237,4 +237,131 @@ public class PptxSkillGoldenDeckTests
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ExecuteAsync_WithStrongPmoSteeringDeck_ShouldRemainFreeOfSlideAlerts()
|
||||
{
|
||||
var workDir = Path.Combine(Path.GetTempPath(), "ax-pptx-golden-pmo-" + Guid.NewGuid().ToString("N"));
|
||||
Directory.CreateDirectory(workDir);
|
||||
|
||||
try
|
||||
{
|
||||
var tool = new PptxSkill();
|
||||
var context = new AgentContext
|
||||
{
|
||||
WorkFolder = workDir,
|
||||
Permission = "Auto",
|
||||
OperationMode = "external",
|
||||
};
|
||||
|
||||
var args = JsonDocument.Parse(
|
||||
"""
|
||||
{
|
||||
"path": "pmo-golden.pptx",
|
||||
"theme": "professional",
|
||||
"template_pack": "pmo",
|
||||
"audience": "Transformation steering committee",
|
||||
"objective": "Confirm the phase-2 PMO steering decision",
|
||||
"decision_ask": "Approve the next wave and keep the governance cadence",
|
||||
"storyline": ["Executive Summary", "Issue Tree", "Risk Overview", "Roadmap", "Recommendation", "Appendix"],
|
||||
"slides": [
|
||||
{
|
||||
"layout": "title",
|
||||
"title": "PMO Steering Pack"
|
||||
},
|
||||
{
|
||||
"layout": "executive_summary",
|
||||
"title": "Executive Summary",
|
||||
"headline": "Phase-2 can proceed with controlled delivery risk and a stable governance model.",
|
||||
"summary_points": [
|
||||
"The current PMO cadence already highlights the few issues that matter most for the next wave.",
|
||||
"The major delivery risk is onboarding bottlenecks, not design ambiguity.",
|
||||
"The decision is now about release timing and governance discipline."
|
||||
],
|
||||
"recommendation": "Approve the next wave and keep the PMO steering cadence intact.",
|
||||
"kpis": [
|
||||
{ "label": "Milestone Health", "value": "92%", "trend": "on track", "note": "core plan stable" },
|
||||
{ "label": "Risk Closure", "value": "78%", "trend": "improving", "note": "weekly review" },
|
||||
{ "label": "Budget", "value": "98%", "trend": "plan", "note": "within guardrails" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"layout": "issue_tree",
|
||||
"title": "Issue Tree",
|
||||
"issues": [
|
||||
"Onboarding capacity is the main delivery bottleneck.",
|
||||
"Regional readiness varies by manager capability.",
|
||||
"Decision latency increases when risk owners are unclear."
|
||||
],
|
||||
"implications": [
|
||||
"Protect the launch window with tighter staffing rules.",
|
||||
"Keep manager enablement inside the PMO workplan.",
|
||||
"Confirm named owners for the top-three risk items."
|
||||
]
|
||||
},
|
||||
{
|
||||
"layout": "risk_heatmap",
|
||||
"title": "Risk Overview",
|
||||
"risks": [
|
||||
{ "title": "Onboarding bottleneck", "impact": "High", "likelihood": "Medium", "mitigation": "Stage wave-2 staffing" },
|
||||
{ "title": "Regional readiness gap", "impact": "Medium", "likelihood": "Medium", "mitigation": "Run manager enablement" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"layout": "roadmap",
|
||||
"title": "Roadmap",
|
||||
"headline": "Run the next wave through three controlled PMO checkpoints.",
|
||||
"phases": [
|
||||
{ "title": "Approve", "detail": "Lock funding, risk owners, and wave scope", "timeline": "Week 1", "owner": "SteerCo" },
|
||||
{ "title": "Launch", "detail": "Start the next wave and monitor onboarding load", "timeline": "Weeks 2-6", "owner": "PMO" },
|
||||
{ "title": "Review", "detail": "Confirm milestone health and risk closure", "timeline": "Week 8", "owner": "Exec sponsors" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"layout": "recommendation",
|
||||
"title": "Recommendation",
|
||||
"headline": "Approve the next wave and keep governance cadence intact.",
|
||||
"recommendation": "Approve the next wave, keep weekly PMO reviews, and assign named owners to the top-three risks.",
|
||||
"summary_points": [
|
||||
"The current evidence is sufficient to proceed without delaying the launch window.",
|
||||
"Governance continuity is the main control lever for delivery quality."
|
||||
],
|
||||
"next_steps": [
|
||||
"Approve funding and scope",
|
||||
"Confirm risk owners",
|
||||
"Start weekly PMO review for wave 2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"layout": "appendix_evidence",
|
||||
"title": "Appendix & Evidence",
|
||||
"evidence": [
|
||||
{ "title": "Milestone trend", "detail": "Core milestones remain above 90% health", "source": "PMO tracker" },
|
||||
{ "title": "Budget status", "detail": "Program remains inside the approved guardrails", "source": "Finance review" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
""").RootElement;
|
||||
|
||||
var result = await tool.ExecuteAsync(args, context, CancellationToken.None);
|
||||
|
||||
result.Success.Should().BeTrue();
|
||||
File.Exists(Path.Combine(workDir, "pmo-golden.pptx")).Should().BeTrue();
|
||||
result.Output.Should().Contain("PPT quality");
|
||||
result.Output.Should().NotContain("Slide alerts:");
|
||||
result.Output.Should().Contain("Needs work: none");
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Directory.Exists(workDir))
|
||||
Directory.Delete(workDir, true);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user