1
0
Fork 0

feat(P1): 변환 그래프 엔진 + 멀티홉 경로탐색 + PDF 압축

ProviderRegistry를 ConversionGraph로 승격하고 ConversionEngine이 자체 Dijkstra로 멀티홉 경로를 자동 합성하도록 전환. 손실을 LossClass 가중치로 SSOT화.

- ConversionGraph: (node,hop) 라벨링 Dijkstra로 홉 제약 최단경로 (일반 Dijkstra의 hops 오염 false negative 회피)
- ConversionEngine.ExecuteChainAsync: 멀티홉 체이닝, 중간 다중출력 거부, 마지막 홉 Status 존중
- PdfToolProvider: pdf->pdf 구조 압축 (PDFsharp, Save 원자화)
- PairsFromMatrix 자기쌍 제외 (png->png 재인코딩 회귀 방지), PDF->이미지 Rasterize 표시
- xUnit 테스트 프로젝트 신설 + 그래프/회귀 14개 통과
- 적대적 병렬 리뷰(27 agents)로 확정된 13건 중 정확성 핵심 수정

SSOT: P1 done
This commit is contained in:
Yun Chan 2026-06-01 12:48:58 +09:00
parent 232f453e15
commit e3ef59e009
16 changed files with 641 additions and 30 deletions

View file

@ -9,6 +9,7 @@ public sealed class ProviderRegistry
= new(StringComparer.OrdinalIgnoreCase);
private readonly HashSet<string> _allInputs = new(StringComparer.OrdinalIgnoreCase);
private readonly HashSet<string> _allOutputs = new(StringComparer.OrdinalIgnoreCase);
private readonly ConversionGraph _graph = new();
public ProviderRegistry(IEnumerable<IConverterProvider> providers)
{
@ -26,10 +27,14 @@ public sealed class ProviderRegistry
list.Add(pair.OutputExtension);
_allInputs.Add(pair.InputExtension);
_allOutputs.Add(pair.OutputExtension);
_graph.AddEdge(pair.InputExtension, pair.OutputExtension, provider, pair.Loss);
}
}
}
/// <summary>모든 Provider 능력으로부터 빌드된 변환 그래프. 엔진의 멀티홉 경로 탐색에 사용.</summary>
public ConversionGraph Graph => _graph;
public IReadOnlyList<IConverterProvider> All => _providers;
public IEnumerable<IConverterProvider> Implemented => _providers.Where(p => p.Capability.IsImplemented);