문서 repair guide와 목적형 HTML/XLSX 경로를 추가 고도화

- ArtifactRepairGuideService를 추가해 HTML/XLSX/DOCX 품질 리뷰 결과를 Repair guide 형태의 실행 가능한 보정 지침으로 변환
- HtmlSkill, ExcelSkill, DocumentAssemblerTool 출력에 repair guide를 연결해 품질 점수 뒤에 후속 보완 방향을 함께 제공
- Excel dashboard sheet에 dashboard_tiles와 variance_series를 추가해 운영 리뷰형 workbook archetype을 강화
- strategy-brief-html, operating-review-xlsx 번들 스킬을 추가해 목적형 문서 생성 진입점을 확장
- README.md와 docs/DEVELOPMENT.md에 2026-04-14 23:58 (KST) 기준 작업 이력과 검증 명령을 반영

검증 결과
- dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_doc_next6\\ -p:IntermediateOutputPath=obj\\verify_doc_next6\\ : 경고 0 / 오류 0
- dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter ArtifactQualityReviewServiceTests|ArtifactRepairGuideServiceTests|ExcelSkillDashboardSummaryTests|HtmlSkillConsultingSectionsTests|HtmlSkillPrintFrameTests|DocumentAssemblerStyleMapTests|DocumentAssemblerDocxFeaturesTests|DocumentAssemblerSemanticTests|PptxSkillGoldenDeckTests|DeckQualityReviewServiceTests -p:OutputPath=bin\\verify_doc_next6_tests\\ -p:IntermediateOutputPath=obj\\verify_doc_next6_tests\\ : 통과 17
This commit is contained in:
2026-04-14 23:59:09 +09:00
parent e1f6caf11a
commit 59ec4a1371
11 changed files with 281 additions and 5 deletions

View File

@@ -0,0 +1,44 @@
using AxCopilot.Services.Agent;
using FluentAssertions;
using Xunit;
namespace AxCopilot.Tests.Services;
public class ArtifactRepairGuideServiceTests
{
[Fact]
public void BuildGuide_ForWorkbookIssues_ShouldReturnWorkbookActions()
{
var review = new ArtifactQualityReport(
"xlsx",
68,
["Includes summary sheet"],
[
new ArtifactReviewIssue("Workbook could benefit from a dashboard sheet to summarize multi-sheet trends.", ArtifactReviewSeverity.Info),
new ArtifactReviewIssue("Summary sheet does not link to detail sheets.", ArtifactReviewSeverity.Warning)
]);
var guide = ArtifactRepairGuideService.BuildGuide(review);
guide.Should().Contain("dashboard sheet");
guide.Should().Contain("detail sheets");
}
[Fact]
public void BuildGuide_ForHtmlIssues_ShouldReturnHtmlActions()
{
var review = new ArtifactQualityReport(
"html",
70,
["Includes print-ready CSS"],
[
new ArtifactReviewIssue("Print-ready business report would benefit from decision summary or evidence cards.", ArtifactReviewSeverity.Warning),
new ArtifactReviewIssue("Strategy brief would be stronger with a comparison or roadmap block.", ArtifactReviewSeverity.Info)
]);
var guide = ArtifactRepairGuideService.BuildGuide(review);
guide.Should().Contain("decision summary");
guide.Should().Contain("comparison or roadmap");
}
}

View File

@@ -40,12 +40,18 @@ public class ExcelSkillDashboardSummaryTests
"scorecards": [
{ "label": "Run-rate", "value": "96%", "status": "On Track", "note": "Ahead of plan" }
],
"dashboard_tiles": [
{ "label": "Decision status", "value": "Ready", "status": "Green", "note": "Funding ask aligned" }
],
"kpis": [
{ "label": "Margin", "value": "18%", "trend": "Q/Q", "note": "Recovered" }
],
"trend_series": [
{ "label": "Revenue", "current": "120", "target": "130", "delta": "-10", "status": "Watch" }
],
"variance_series": [
{ "label": "Opex", "actual": "84", "target": "80", "variance": "+4", "status": "Watch" }
],
"sheet_summaries": [
{ "sheet": "Revenue", "status": "Watch", "summary": "SMB margin pressure", "owner": "Sales Ops" }
],
@@ -66,6 +72,7 @@ public class ExcelSkillDashboardSummaryTests
result.Success.Should().BeTrue();
result.Output.Should().Contain("Quality score");
result.Output.Should().Contain("Repair guide:");
using var doc = SpreadsheetDocument.Open(Path.Combine(workDir, "dashboard-review.xlsx"), false);
var workbookPart = doc.WorkbookPart!;
@@ -99,6 +106,10 @@ public class ExcelSkillDashboardSummaryTests
dashboardTexts.Should().Contain("Open: Revenue");
dashboardTexts.Should().Contain("Key KPIs");
dashboardTexts.Should().Contain("Margin");
dashboardTexts.Should().Contain("Dashboard Tiles");
dashboardTexts.Should().Contain("Decision status");
dashboardTexts.Should().Contain("Variance Overview");
dashboardTexts.Should().Contain("Opex");
}
finally
{

View File

@@ -95,6 +95,7 @@ public class HtmlSkillConsultingSectionsTests
var result = await tool.ExecuteAsync(args, context, CancellationToken.None);
result.Success.Should().BeTrue();
result.Output.Should().Contain("Repair guide:");
var html = File.ReadAllText(Path.Combine(workDir, "consulting.html"));
html.Should().Contain("comparison-grid");
html.Should().Contain("roadmap-block");