개발언어 워크플로 힌트와 문서 품질 출력 경로를 고도화한다

- CodeLanguageCatalog에 manifest/build/test/lint 조회 API와 workflow summary 조합기를 추가해 no-LSP fallback과 컨텍스트 생성이 같은 힌트 소스를 재사용하도록 정리한다.

- WorkspaceContextGenerator에 Language Workflow 섹션을 추가해 상위 언어의 실행 힌트를 .ax-context.md에 기록하고, HtmlSkill/ExcelSkill은 공통 ArtifactQualityOutputFormatter로 품질 요약과 repair guide를 일관되게 출력하도록 맞춘다.

- README.md, docs/DEVELOPMENT.md, docs/NEXT_ROADMAP.md를 2026-04-15 09:49 (KST) 기준으로 갱신하고, CodeLanguageCatalogTests 및 WorkspaceContextGeneratorTests를 확장해 빌드 경고 0/오류 0과 관련 테스트 35건 통과를 확인한다.
This commit is contained in:
2026-04-15 09:52:36 +09:00
parent baafd8280c
commit bcb3cc4039
10 changed files with 197 additions and 6 deletions

View File

@@ -57,4 +57,24 @@ public class CodeLanguageCatalogTests
summary.Should().Contain("go build ./...");
summary.Should().Contain("go test ./...");
}
[Fact]
public void BuildWorkflowSummary_ShouldExposeActionableWorkflowHints()
{
var summary = CodeLanguageCatalog.BuildWorkflowSummary("rust");
summary.Should().Contain("Rust");
summary.Should().Contain("Cargo.toml");
summary.Should().Contain("cargo build");
summary.Should().Contain("cargo test");
summary.Should().Contain("cargo clippy");
}
[Fact]
public void HintLookups_ShouldReturnLanguageSpecificEntries()
{
CodeLanguageCatalog.GetManifestHints("python").Should().Contain("pyproject.toml");
CodeLanguageCatalog.GetBuildHints("go").Should().Contain("go build ./...");
CodeLanguageCatalog.GetTestHints("kotlin").Should().Contain("./gradlew test");
CodeLanguageCatalog.GetLintHints("javascript").Should().Contain("eslint .");
}
}

View File

@@ -315,4 +315,27 @@ public class WorkspaceContextGeneratorTests
Directory.Delete(tempDir, recursive: true);
}
}
[Fact]
public async Task GenerateAsync_IncludesLanguageWorkflowHints()
{
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(tempDir);
try
{
File.WriteAllText(Path.Combine(tempDir, "Cargo.toml"), "[package]\nname='sample'");
File.WriteAllText(Path.Combine(tempDir, "main.rs"), "fn main() {}");
var result = await WorkspaceContextGenerator.GenerateAsync(tempDir);
result.Should().Contain("## Language Workflow");
result.Should().Contain("Rust:");
result.Should().Contain("Cargo.toml");
result.Should().Contain("cargo build");
}
finally
{
Directory.Delete(tempDir, recursive: true);
}
}
}