문서 품질 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:
2026-04-15 10:25:44 +09:00
parent 06540a0e71
commit 2c1926356a
13 changed files with 476 additions and 21 deletions

View File

@@ -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
{
}
}
}
}